关于加速计的问题

  • 本帖最后由 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;

}

顶一下,没人晓得吗……

— Begin quote from ____

老G 发表于 2012-5-30 18:14 url

加速计是很敏感的,如果不想要那么敏感,你需要增加一个“衰减”算法

网上有类似的例子 …

— End quote

好,多谢,我去找找看。我第二个函数不算衰减吗?
看官网上有个外国人问有关于版本更新后的加速剂bug,下面回复说以前需要自己计算的,现在计算已经写在引擎里了,那第二个函数还有必要么?

顶一下,我就是在网上自己搜索发现没有什么资料才发帖的…中文英文都有看,英文可能的看的不全,但是依旧没找到啊,有例子麻烦给个链接啊。继续求助啊!!