【问题标题】:Sprite Kit setting a nodes angle (not rotate)Sprite Kit 设置节点角度(不旋转)
【发布时间】:2014-02-01 20:01:00
【问题描述】:

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

所以我尝试使用:

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 这样的方法?这样,每当调用更新时,它都会重置角度,并且实际上看起来玩家正在朝着地球移动。

【问题讨论】:

  • atan2 函数对我来说是关键。我不知道如何计算正坐标系所有象限的旋转。单独的 atan 是行不通的。

标签: ios sprite sprite-kit angle sknode


【解决方案1】:

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

你想要的是:

angleToTurn = atan2(dy,dx);

代替

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

【讨论】:

    【解决方案2】:

    旋转到角度使用

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

    精灵的运动将被动画化,看起来比设置 zRotation 更好。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      相关资源
      最近更新 更多