3

如何为 SKSpriteNode 对象设置最小碰撞角度,以便当它与任何其他精灵碰撞时,它的反向角度总是大于或等于这个角度 - 无论是负的还是正的 - ?

我的目标是防止两个平行边之间的死锁碰撞——例如——这样球就不会永远在它们之间摆动。

4

1 回答 1

2

最后,我找到了一个解决方案——可能不是最好的,但效果很好——。

当精灵与另一个精灵碰撞时,我从等式中找到精灵速度角:

angle = atan(dy/dx)

并检查角度值。如果它小于最小值,我将角度设置为最小值,然后从等式中找到新的速度 dy:

dy_new = dx * tan(new_angle)

并从等式中找到 dx_new:

dx_new = sqrt(pow( dx, 2) + pow(dy, 2) - pow(dx_new, 2));

这意味着速度大小相同,只是方向发生了变化。这是基于向量方程:

speed = sqrt(pow(dx, 2) + pow(dy, 2)); 和
角度 = atan(dy/dx);

这是速度向量数学的链接: http ://faculty.wwu.edu/vawter/PhysicsNet/Topics/Vectors/TheVelocityVector.html

于 2015-11-19T18:56:30.583 回答