嗨伙计们,我的屏幕上有一个字符的代码现在我想在y方向上旋转它,就像一个人根据随机时间间隔向左或向右看。 但我的代码不工作有没有人有任何线索在哪里我犯了错误?顺便说一句,请不要随意查找任何随机时间,因为我是新手,并且不知道根据zRotation进行轮换的SKAction。
- (void) RandomRotator {
_Enemy.zRotation += 180;
_Enemy.zRotation -= 180;
SKAction *wait = [SKAction waitForDuration:2.5];
[_Enemy runAction:[SKAction sequence:@[wait]]];
}
现在究竟是什么意思就像上图:
答案 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}}
我希望这是有道理的。我不确定我是否完全理解你的问题。