Sprite Kit设置节点角度(不旋转)

时间:2014-02-01 20:01:01

标签: ios sprite sprite-kit angle sknode

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

所以我试图使用:

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这样的方法?这样,无论何时调用更新,它都会重置角度,实际上看起来像玩家正朝着这个星球移动。

2 个答案:

答案 0 :(得分:2)

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

你想要的是:

angleToTurn = atan2(dy,dx);

而不是

angleToTurn = (180.0 / M_PI) * atan2(dy,dx);

答案 1 :(得分:1)

使旋转角度使用

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

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

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