0

私は最初の Cocos2D ゲームで加速度計を使用していますが、問題なく動作します。以下のコードを使用してスプライトを移動できますが、方向を LandscapeLeft から LandscapeRight に変更すると、スプライトが Y 座標に反応しなくなり、スプライトが画面の上部に移動し、適切に応答しません...デバイスの向きを変更したためだと思いますが、アプリ開発にかなり慣れていないため、わかりません。助けていただければ幸いです。

これが私が使用しているサンプルコードです...

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{    
    //this determines how sensitive the accelerometer reacts (higher = more sensitive)
    NSUserDefaults *defaulObj = [NSUserDefaults standardUserDefaults];
    float sensitivity = [defaulObj floatForKey:@"Sensitivity"]; //10.0f
    if (!sensitivity) {
        sensitivity = 6;
    }

    // this controls how quickly the velocity decelerates (lower = quicker to change direction)
    float deceleration = 0.4f;
    static float xVal = 0;

    if (!self.isFlag) {
        xVal = -acceleration.x;
        self.isFlag = TRUE;
    }

    playerVelocity.x = playerVelocity.x * deceleration + (xVal + acceleration.x) * sensitivity;
    playerVelocity.y = playerVelocity.y * deceleration + acceleration.y * sensitivity;
    playerVelocity.y = playerVelocity.y*-1;
}
4

1 に答える 1

1

おそらくこれが役に立ち、現在のデバイスの向きに沿って Y を反転させます。

float rotatedY = acceleration.y;
if ([UIApplication sharedApplication].statusBarOrientation==UIInterfaceOrientationLandscapeLeft) {
rotatedY *= -1;
}

次に、acceleration.y の代わりにrotatedY を使用します。

于 2013-07-25T10:37:16.070 に答える