我使用Cocos2d 2.0和uiacceleration控制器执行了一个太空射击游戏项目。uiacceleration有一些缺点:
- 需要校准
- 它取决于实际加速度,因此它可能导致灵敏度松散,因为很难找到最佳配置
我找到了一些关于如何使用陀螺仪的教程(我知道这只适用于最新的iphone/ipod,但由于我已经使用Cocos2d 2.0 -> OpenGL 2.0 ES,这应该无关重要)。
是否有任何测试项目,我可以尝试陀螺仪?我仍然不清楚它是如何工作的,如果这将给我的代码带来真正的变化。
这是基于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)];
}
}
在一天结束时,我使用陀螺仪作为移动角色的主要输入源。原因在于,加速度计提供了以G-force表示的加速度值,而加速度本身并不能提供任何关于玩家是否以正确角度持有设备的信息。使用accelerometer,我必须根据每个新游戏场景的初始加速度校准设备。使用陀螺仪可以让设备的绝对位置具有恒定的值,这样我就可以跳过校准阶段(这可能会让用户感到厌烦),只留下校准灵敏度的选项(而不是在每个GameScene设置初始播放位置)。
@LearnCocos2D说陀螺仪不是加速度计的替代品,所以,我现在可以很容易地集成加速度检测来触发特殊的移动/拍摄或其他奇特的东西。