快速制作一个简单的SKNode"向前发展"在一个角度

时间:2017-01-20 07:36:45

标签: swift xcode angle skaction sknode

我已经在这里以不同的方式提出了这个问题; Swift-Setting a physics body velocity by angle但不幸的是,三次尝试回答它并不完全是我想要的,尽管我对他们教给我的东西感激不尽。我决定用一个例子和进一步的解释来简单地重新解释我的问题,而不是通过评论使讨论永久化。所以就是这样。

想象一下,我的SKNode位于屏幕中央。让我们说这是一个球,所以对它的任何旋转动作都是不可见的。我需要一种方法来选择一个随机角度,然后让SKNode旋转到它,然后继续沿着屏幕中心的原始位置由上述角度确定的方向移动,直到,例如,边缘屏幕。

我知道如何确定随机角度,让SKNode旋转到它,让它停在屏幕的边缘。希望通过这个例子我需要更清楚,一种简单地让SKNode向前移动的方法,但是在由单个变量确定的角度上,而不是由两个,dx和dy确定的速度。

提前致谢。

1 个答案:

答案 0 :(得分:2)

要做到这一点,你只需要使用一些三角函数!

zRotation介于0和90之间时,除了将其转换为弧度之外,您无需对角度执行任何操作。只需致电tan(radianAngle)即可。现在tan将返回节点在x轴上移动1时应在y轴上移动多少。如果你之前学过三角学,你应该明白我在说什么。如果您还没有学习三角学,请学习它。 :)

假设节点的zRotation是60度,即π/ 3弧度。将其传递到tan,即可获得√3。这意味着dx中的dySKAction参数必须采用1:√3的比例才能使节点向60度方向移动。

zRotation介于90和180之间时,您需要先从180减去角度,然后将其转换为弧度。再次,将其传递给tan,返回值是您的节点在x轴上移动-1时应在y方向上移动的程度。 dx : dy比率现在为-1:tan(angleInRadians)。

zRotation介于180和270之间时,从该角度减去180并将其转换为弧度。 dx : dy比率为-1:-tan(angleInRadians)。

最后,zRotation在270和360之间,从360减去角度并将其转换为弧度。 dx : dy比率为1:-tan(angleInRadians)。

在将角度转换为弧度之前,请检查角度是否为90度。如果是,请对dxdy进行硬编码,因为tan(M_PI / 2)未定义。