2015-11-18 27 views
3

如何設置SKSpriteNode對象的最小碰撞角度,以便當碰撞到任何其他sprite時,其反轉角度始終大於或等於此角度 - 無論是負值還是正值 - ?如何設置SKSpriteNode的最小碰撞角度

我的目標是防止兩個平行邊緣之間的死鎖碰撞 - 例如 - ,以便球不會永遠在它們之間擺動。

+0

一個臨時的解決方案,我發現是檢查精靈的速度,當它發生碰撞,如果低於最低值,在申請衝動具有大值的精靈來避免死鎖。我也嘗試設置速度的dx和dy,但是這改變了我不想要的精靈速度意義。 –

回答

2

最後,我找到了一個解決方案 - 可能不是最好的,但它工作正常。

當精靈與其它一個碰撞,我發現從等式精靈速度角度:

角= 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));和
angle = atan(dy/dx);

這裏是速度矢量數學的鏈接: http://faculty.wwu.edu/vawter/PhysicsNet/Topics/Vectors/TheVelocityVector.html