SKSpriteNode オブジェクトの最小衝突角度を設定して、他のスプライトと衝突したときに、反転角度が常にこの角度 (負または正) 以上になるようにするにはどうすればよいですか?
私の目的は、たとえば、2 つの平行なエッジ間のデッドロック衝突を防止して、ボールがそれらの間で永遠に振動しないようにすることです。
SKSpriteNode オブジェクトの最小衝突角度を設定して、他のスプライトと衝突したときに、反転角度が常にこの角度 (負または正) 以上になるようにするにはどうすればよいですか?
私の目的は、たとえば、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