使用iPhone加速度计沿x轴移动精灵

3
我正在使用cocos2d开发iPhone游戏。我试图在竖屏模式下使用加速计来移动精灵进行左右移动。但是,由于我使用的代码默认情况下会向右移动,除非手机倾斜45度角,也就是说返回值都是正数(表示应该向右移动),直到将其向左或向右倾斜45度角。中心位置返回大约600,然后随着手机向左或向右倾斜而减少,直到达到45度角(此时返回0并开始变负)。以下是我正在使用的代码。任何帮助都将不胜感激。
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

        #define kFilteringFactor 0.75
            static UIAccelerationValue rollingX = 0, rollingY = 0, rollingZ = 0;

            rollingX = (acceleration.x * kFilteringFactor) +
            (rollingX * (1.0 - kFilteringFactor));
            rollingY = (acceleration.y * kFilteringFactor) +
            (rollingY * (1.0 - kFilteringFactor));
            rollingZ = (acceleration.z * kFilteringFactor) +
            (rollingZ * (1.0 - kFilteringFactor));

            float accelX = rollingX;
            float accelY = rollingY;
            float accelZ = rollingZ;

            CGSize winSize = [CCDirector sharedDirector].winSize;

        #define kRestAccelX 0.6
        #define kShipMaxPointsPerSec (winSize.height*0.5)
        #define kMaxDiffX 0.2

            float accelDiffX = kRestAccelX - ABS(accelX);
            float accelFractionX = accelDiffX / kMaxDiffX;
            float pointsPerSecX = kShipMaxPointsPerSec * accelFractionX;

            _shipPointsPerSecX = pointsPerSecX;
            NSLog(@"_shipPointsPerSecX: %f", _shipPointsPerSecX);
}

- (void)updateShipPos:(ccTime)dt {

    CGSize winSize = [CCDirector sharedDirector].winSize;

    float maxX = winSize.width - _ship.contentSize.width/2;
    float minX = _ship.contentSize.width/2;

    float newX = _ship.position.x + (_shipPointsPerSecX * dt);
    newX = MIN(MAX(newX, minX), maxX);
    _ship.position = ccp(newX, _ship.position.y);
   // NSLog(@"newx: %f", newX);

}

请查看以下链接,以获取明确的解决方案:http://gamedev.stackexchange.com/questions/33412/accelerometer-to-move-player-left-and-right/33427#33427 - Guru
1个回答

1
基本上,您的加速度计应该更新加速度(使用过滤因子,就像您所做的那样)。
但是,在此之外,您还应该维护速度和位置,并在预定步骤(float dt)函数中适应两者,如下所示:
速度+=加速度*dt 位置+=速度*dt
对x和y都这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接