如何为 SKSpriteNode 设置最小碰撞角度
How to set minimum collision angle for SKSpriteNode
如何为 SKSpriteNode 对象设置最小碰撞角度,以便当它与任何其他 sprite 碰撞时,它的反转角度始终大于或等于该角度 - 负数或正数 - ?
我的objective是为了防止两条平行边之间的死锁碰撞-例如-,这样球就不会永远在它们之间摆动。
终于,我找到了解决方案 - 可能不是最好的,但效果很好 -.
当精灵与其他精灵碰撞时,我从等式中找到精灵速度角:
角度 = 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));
这意味着速度大小相同,只是方向改变了。
这是基于向量方程:
速度 = sqrt(pow(dx, 2) + pow(dy, 2));和
角度=阿坦(dy/dx);
这里是速度矢量数学的link:
http://faculty.wwu.edu/vawter/PhysicsNet/Topics/Vectors/TheVelocityVector.html
如何为 SKSpriteNode 对象设置最小碰撞角度,以便当它与任何其他 sprite 碰撞时,它的反转角度始终大于或等于该角度 - 负数或正数 - ?
我的objective是为了防止两条平行边之间的死锁碰撞-例如-,这样球就不会永远在它们之间摆动。
终于,我找到了解决方案 - 可能不是最好的,但效果很好 -.
当精灵与其他精灵碰撞时,我从等式中找到精灵速度角:
角度 = 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));
这意味着速度大小相同,只是方向改变了。
这是基于向量方程:
速度 = sqrt(pow(dx, 2) + pow(dy, 2));和
角度=阿坦(dy/dx);
这里是速度矢量数学的link: http://faculty.wwu.edu/vawter/PhysicsNet/Topics/Vectors/TheVelocityVector.html