精灵套件中的随机旋转

时间:2014-04-09 05:26:57

标签: rotation sprite

嗨伙计们,我的屏幕上有一个字符的代码现在我想在y方向上旋转它,就像一个人根据随机时间间隔向左或向右看。 但我的代码不工作有没有人有任何线索在哪里我犯了错误?顺便说一句,请不要随意查找任何随机时间,因为我是新手,并且不知道根据zRotation进行轮换的SKAction。

   - (void) RandomRotator {
          _Enemy.zRotation += 180;
          _Enemy.zRotation -= 180;
          SKAction *wait = [SKAction waitForDuration:2.5];
          [_Enemy runAction:[SKAction sequence:@[wait]]];
    }

现在究竟是什么意思就像上图: enter image description here

1 个答案:

答案 0 :(得分:3)

首先,角度以弧度而非度数来度量。 因此,_Enemy.zRotation += 180;应该是_Enemy.zRotation += M_PI;而不是float duration = 1.0; SKAction *rotateForward = [SKAction rotateByAngle:M_PI duration:duration]; SKAction *rotateBackward = [SKAction rotateByAngle:-M_PI duration:duration]; SKAction *wait = [SKAction waitForDuration:2.5]; [_Enemy runAction:[SKAction sequence:@[rotateForward, wait, rotateBackward, wait]]];`

此刻您的轮换实际上并不是动画或做任何事情。您必须专门调用一个动作来旋转。 角色正在运行的唯一动作是等待动作。

我假设您想要为字符旋转设置动画,在这种情况下请尝试:

- (void)randomRotator {
    SKAction *rotateForward = [SKAction rotateByAngle:M_PI duration:1.0 + drand48()]; 
    // Where 1.0 + drand48() returns a float between 1.0 and 2.0
    SKAction *rotateBackward = [SKAction rotateByAngle:-M_PI duration:1.0 + drand48()];
    SKAction *wait1 = [SKAction waitForDuration:2.0 + drand48()];
    SKAction *wait2 = [SKAction waitForDuration:2.0 + drand48()];
    [_Enemy runAction:[SKAction sequence:@[rotateForward, wait1, rotateBackward, wait2]] completion:^{
        [self randomRotator]; // Call the method again, to repeat rotation
    }];
}

如果你想让敌人在旋转之间等待一段时间;并且不断重复这个动画,你可以做类似的事情:

{{1}}

我希望这是有道理的。我不确定我是否完全理解你的问题。