私は長い間、衝突応答方法に苦労していて、actionscript 3で書いています。私はそれを変更しただけなので、誰かがこのコードの意味を説明してくれることを望んでいます。ゼロから書いたわけではありません。また、衝突検出ツールキットを使用して、衝突が発生している場所を見つけています。
私がやろうとしているのは、ボール(キーボードで画面上を移動するオブジェクト)が壁やオブジェクトに当たって壁やオブジェクトを通過しないようにすることです。
これについての私の理解は、衝突が発生している角度を見つけてから、新しいベクトルである隣接する角度を見つけて、オブジェクトがどれだけ重なっているのかを押し戻す必要があるということですが、これがどのように行われるのかわかりません関数は、例えば何であるか
vx0:Number = ball.vx * cos + ball.vy * sin;
見つける?さらに、ボールを加速させたくありません。オブジェクトに当たるまで速度を一定にしたいのです。また、この配列を逆方向に検索する方が高速でしょうか?
-時間を割いてこれを手伝ってくれた人に感謝します。スペルミスがあった場合は申し訳ありません。
for(i = 0; i < collisions.length; i++)
{
var collision:Object = collisions[i];
var angle:Number = collision.angle;
var overlap:int = collision.overlapping.length;
var ball:Ball = collision.object1;
var sin:Number = Math.sin(angle);
var cos:Number = Math.cos(angle);
var vx0:Number = ball.vx * cos + ball.vy * sin;
var vy0:Number = ball.vy * cos - ball.vx * sin;
vx0 = .4;
ball.vx = vx0 * cos - vy0 * sin;
ball.vy = vy0 * cos + vx0 * sin;
ball.vx -= cos * overlap / ball.radius;
ball.vy -= sin * overlap / ball.radius;
}