加速计的使用为了更好的响应用户的操作,其原理主要是通过改变精灵的坐标,实现移动的效果、
首先开启加速计控制权限:
setAccelerometerEnabled(true);
然后初始化物体的位置坐标,并添加到父节点:
m_pBall = CCSprite::create("Images/ball.png");
m_pBall->setPosition(ccp(VisibleRect::center().x, VisibleRect::center().y));
addChild(m_pBall);
m_pBall->retain();//防止被释放了,就没得玩喽
转坐标函数是这个:
void AccelerometerTest::didAccelerate(CCAcceleration* pAccelerationValue)
其中 FIX_POS(ptNext.x, (VisibleRect::left().x+ballSize.width / 2.0), (VisibleRect::right().x - ballSize.width / 2.0));
这段代码里面的FIX_POS是一个宏定义:
#define FIX_POS(_pos, _min, _max) \
if (_pos < _min) \
_pos = _min; \
else if (_pos > _max) \
_pos = _max; \
其中CCPoint ptNext = pDir->convertToGL(ptTemp);
这段代码里面convertToGL():
CCDirector.sharedDirector().convertToUI()方法,这个方法是将坐标转换成为UI坐标,要知道,在cocos2d里面坐标是用左下角向上的,而不是一般的左上角,用这个方法可以方便的转换。
最后重新设置精灵的坐标即可:
m_pBall->setPosition(ptNext);
PS:在智能手机上面,可以通过改变手机的方向,运用重力感应操作球的方向。而在电脑上运行的时候按住键盘的上,下,左,右,键效果是一样的。
祝你学习愉快!
来源:https://www.cnblogs.com/youdadashi/archive/2013/05/25/3098788.html