0

我已经使用 Cocos2d 2.0 和 UIAccelleration 控制器实现了一个太空射击游戏项目。UIAcceleration 作为一些缺点:

  • 它需要校准
  • 它取决于实际的加速度,因此它可能导致灵敏度下降,因为很难找到最佳配置

我找到了一些关于如何使用 Gyroscope 的教程(我知道这仅在最新的 iPhone/IPods 上,但由于我已经在使用 Cocos2d 2.0 -> OpenGL 2.0 ES,所以没关系)。

有没有可以试用陀螺仪的测试项目?我仍然不是 100% 清楚它是如何工作的,以及这是否会给我的代码带来真正的改变。

那是我基于 UIAcceleration 的控制器:

#define kHeroMovementAction 1
#define kPlayerSpeed 100
- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    if (calibrationLayer.visible){
        [self evaluateCalibration:acceleration];
        initialAccelleration=acceleration;
        return;
    }

    if([self evaluatePause]){
        return;
    }

    ShooterScene * shooterScene = (ShooterScene *) [self parent];
    ShipEntity *playerSprite = [shooterScene playerShip];

    float accellerationtSensitivity = 0.5f;

    / 
    UIAccelerationValue xAccelleration = acceleration.x - initialAccelleration.x;
    UIAccelerationValue yAccelleration = acceleration.y - initialAccelleration.y;


    if(xAccelleration > 0.05 || xAccelleration < -0.05) {
        [playerSprite setPosition:CGPointMake(playerSprite.position.x +  xAccelleration * 80, playerSprite.position.y + yAccelleration * 80)];
    }
    else if(yAccelleration > 0.05 || yAccelleration < -0.05)
    {
        [playerSprite setPosition:CGPointMake(playerSprite.position.x +  xAccelleration * 80, playerSprite.position.y + yAccelleration * 80)];
    }

   }
4

1 回答 1

0

一天结束时,我使用陀螺仪作为移动角色的主要输入源。原因是加速度计提供了以 G 力表示的加速度作为值,而加速度本身并不能为您提供有关玩家是否以正确的角度握住设备的任何信息。使用加速度计,我必须根据每个新 GameScene 的初始加速度校准设备。相反,使用陀螺仪允许相对于设备的绝对位置具有恒定值,这样我可以跳过校准阶段(这可能会让用户很烦),只留下校准灵敏度的选项(而不是在每个 GameScene 设置初始播放位置)。

正如@LearnCocos2D 所说,陀螺仪不是加速度计的替代品,因此,我现在可以轻松集成加速度检测来触发特殊动作/射击或其他花哨的东西。

于 2013-06-20T09:48:39.183 回答