- 本帖最后由 woshidanew 于 2012-5-28 19:25 编辑 *
小弟目前头一次使用加速计控制主角x轴方向的移动,参考的教程是http://mobile.csdn.net/a/20120502/2805248_4.html做了一些改动,代码如下方。但现在有两个bug:
1.将手机放在水平面上不做任何动作,主角会往右移,虽然很慢但还是可以发现;
2.在目前游戏过程中主角时不时就会突然跳到最右边,概率不定。
小弟游戏是竖屏的,不知如何解决,原先使用的是0.9.1,后更换到0.12.0后仍未解决,小弟觉得代码没有错啊,还望各位大神指点!!
void HeroController::gravityMove(ccTime dt){ CCSize winSize = CCDirector::sharedDirector()->getWinSize();
float maxX = winSize.width - 60;
float minX = 60;
float diff = (heroPosPSX * dt) ;
float newX = heroSprite->getPosition().x + diff;
newX = MIN(MAX(newX, minX), maxX);
heroSprite->setPosition(ccp(newX, heroSprite->getPosition().y));}
void HeroController::didAccelerate(CCAcceleration* pAccelerationValue) {
#define KFILTERINGFACTOR 0.1
#define KRESTACCELX 0
#define KSHIPMAXPOINTSPERSEC (winSize.width*0.5)
#define KMAXDIFFX 0.2
CCSize winSize = CCDirector::sharedDirector()->getWinSize(); double rollingX ;
// Cocos2DX inverts X and Y accelerometer depending on device orientation
// in landscape mode right x=-y and y=x !!! (Strange and confusing choice)
pAccelerationValue->x = pAccelerationValue->x ;
rollingX = (pAccelerationValue->x * KFILTERINGFACTOR) + (rollingX * (1.0 - KFILTERINGFACTOR));
float accelX = pAccelerationValue->x - rollingX ;
float accelDiff = accelX - KRESTACCELX;
float accelFraction = accelDiff / KMAXDIFFX;
heroPosPSX = KSHIPMAXPOINTSPERSEC * accelFraction;
}