IOS使用CMRotationRate在屏幕上移动对象

时间:2014-11-23 02:02:15

标签: ios iphone cocos2d-iphone ccsprite

我的id游戏有一个简单的逻辑,它在iphone上启用,方向锁定为Landscape Left

如果手机旋转离开你,想象一下把它拿在横向模式下,我希望我的物体向上移动,否则我希望物体向下移动。

-(void)outputRotationData:(CMRotationRate)rotation
{


    if (fabs(currentMaxRotY - rotation.y) < .3) {
        return;
    }
    if(rotation.y > 0 ){
        if (!(ship.position.y < 10)) {
            [ship runAction:actionMoveDown];
            NSLog(@"moving down");
        }
    }else{
        if (!(ship.position.y > screenHeight)) {
            [ship runAction:actionMoveUp];
            NSLog(@"moving up");

        }
    }

    currentMaxRotY = rotation.y;


}

上面的代码有效。只是没有你想象的那样。即使手机旋转离开你,有时物体会向下移动;但它大部分时间都正确地向上移动。我假设由于我认为如果我们的最后一次旋转和当前旋转的差异不超过.3

,我认为可以通过返回来确定灵敏度。

1 个答案:

答案 0 :(得分:0)

正如评论中提到的@ LearnCocos2D,陀螺仪不是我们想要在这里使用的。

下面的代码会将对象放在基于角度的位置。

我最终没有使用它,只是使用tap来移动!

    -(void)outputAccelertionData:(CMAcceleration)acceleration
{

    double x, y, z, angle;
    x = roundThree(acceleration.x);
    y = roundThree(acceleration.y);
    z = roundThree(acceleration.z);
    angle = atan(x/z);
    angle = [self RadiansToDegrees:angle];
    if (z == 0) {
        angle = 90;
    }
    if (angle < 40) {

        [self runThisAction:angle];
    }else if (angle > 50){

                [self runThisAction:-angle/2];
    }

}