1

好的,所以我有一个游戏,玩家(太空船)试图绕行星飞行,但如果它关闭,玩家的太空船就会转向行星。

所以我正在尝试使用:

float dx = [_player position].x - [planetNodes[i] position].x;
float dy = [_player position].y - [planetNodes[i] position].y;
double angleToTurn = (180.0 / M_PI)  * atan2(dy, dx);
NSLog(@"Turn to: %f", angleToTurn);
_player.zRotation = angleToTurn;

这段代码放在场景的更新方法中。每当玩家离地球太近时,它就会开始旋转,因为我使用的是旋转方法。有没有像 setAngle 这样的方法?这样,每当调用更新时,它都会重置角度,实际上看起来玩家正在朝着地球移动。

4

2 回答 2

2

您正在zRotation正确使用该属性。设置该属性将产生预期的效果,问题是您在应该给它的时候给出一个度数_player.zRotation的值弧度。当玩家接近行星时,角度会发生变化,并且玩家的旋转速度比应有的快 180/pi 倍,因为您将角度乘以该角度。

你想要的是:

angleToTurn = atan2(dy,dx);

代替

angleToTurn = (180.0 / M_PI) * atan2(dy,dx);
于 2014-02-01T21:30:59.320 回答
1

旋转到角度使用

        [_player runAction:[SKAction rotateToAngle:atan2(dy, dx) duration:0.0 shortestUnitArc:YES]]

精灵运动将被动画化并且看起来比仅设置 zRotation 更好。

注意:该函数采用弧度,因此无需转换为度数。

于 2014-07-11T08:57:08.557 回答