我已经在这里以不同的方式提出了这个问题; Swift-Setting a physics body velocity by angle但不幸的是,三次尝试回答它并不完全是我想要的,尽管我对他们教给我的东西感激不尽。我决定用一个例子和进一步的解释来简单地重新解释我的问题,而不是通过评论使讨论永久化。所以就是这样。
想象一下,我的SKNode位于屏幕中央。让我们说这是一个球,所以对它的任何旋转动作都是不可见的。我需要一种方法来选择一个随机角度,然后让SKNode旋转到它,然后继续沿着屏幕中心的原始位置由上述角度确定的方向移动,直到,例如,边缘屏幕。
我知道如何确定随机角度,让SKNode旋转到它,让它停在屏幕的边缘。希望通过这个例子我需要更清楚,一种简单地让SKNode向前移动的方法,但是在由单个变量确定的角度上,而不是由两个,dx和dy确定的速度。
提前致谢。
答案 0 :(得分:2)
要做到这一点,你只需要使用一些三角函数!
当zRotation
介于0和90之间时,除了将其转换为弧度之外,您无需对角度执行任何操作。只需致电tan(radianAngle)
即可。现在tan
将返回节点在x轴上移动1时应在y轴上移动多少。如果你之前学过三角学,你应该明白我在说什么。如果您还没有学习三角学,请学习它。 :)
假设节点的zRotation
是60度,即π/ 3弧度。将其传递到tan
,即可获得√3。这意味着dx
中的dy
和SKAction
参数必须采用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度。如果是,请对dx
和dy
进行硬编码,因为tan(M_PI / 2)
未定义。