Swift-在一个角度上简单地"move forward"制作一个SKNode

Swift-Making an SKNode simply "move forward" on an angle

我已经在这里以不同的方式问过这个问题; Swift-Setting a physics body velocity by angle 但不幸的是,这三个答案的尝试并不是我想要的,尽管我很感激他们教给我的东西。我决定我应该简单地用一个例子和进一步的解释来改写我的问题,而不是通过评论来延续讨论。原来如此。

假设我有一个 SKNode 位于屏幕中央。假设这是一个球,因此它上面的任何旋转动作都是不可见的。我需要一种方法来选择一个随机角度,并让 SKNode 旋转到它,然后从屏幕中心的原始位置开始沿着上述角度确定的方向连续移动,直到边缘屏幕。

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

提前致谢。

为此,您只需要使用一些三角函数!

zRotation介于0和90之间时,除了将其转换为弧度外,不需要对角度做任何操作。只需调用 tan(radianAngle)。现在tan将return节点在x轴移动1的时候应该在y轴移动多少。如果你以前学过三角函数,你应该明白我在说什么。如果您还没有学过三角函数,请学习它。 :)

假设节点的 zRotation 是 60 度,即 π/3 弧度。将其传递给 tan,您将得到 √3。这意味着SKAction中的dxdy参数的比例必须为1:√3才能使节点沿60度的方向移动。

zRotation在90到180之间时,需要先用180减去角度,再换算成弧度。同样,将其传递给 tan,return 值是节点在 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) 未定义。