ピクセルを使用して衝突を検出するための衝突クラスを作成しました。私のクラスでは、衝突角度を決定するためのいくつかの関数も開発しました。これに基づいて、いくつかの例を作成しました。
http://megaswf.com/serve/25437/
http://megaswf.com/serve/25436/
(重力を変更するためのスペース、ボールにある程度の速度を与えるための右/左。)
お気づきかもしれませんが、奇妙なことが起こります。
- ボールスピードが非常に遅いとき
- ボールの方向が障害物にほぼ接しているとき。
衝突http://img514.imageshack.us/img514/4059/colisao.png
上の画像は、衝突角度の計算方法を示しています。私は赤い点をキーポイントと呼んでいます。キーポイントの最大数(通常は4つ)を検索します。2つ以上のキーポイントが見つかった場合は、最も遠い2つのキーポイントを選択します(青いオブジェクトの1つに示されています)。このようにして、オブジェクトが表面のどこに衝突したかに対する法線角度を見つけます。これが時代遅れのやり方かどうかはわかりません。
その角度に基づいて、速度ベクトルを回転させてバウンスを行います。
数学を行うためのコードはここにあります:
static public function newSpeedVector(speedX: Number, speedY: Number, normalAngle: Number): Object{
var vector_angle: Number = Math.atan2(speedY, speedX) * (180/Math.PI);
var rotating_angle: Number = (2*(normalAngle - vector_angle) + 180) % 360;
var cos_ang: Number = Math.cos(rotating_angle/DEGREES_OF_1RAD);
var sin_ang: Number = Math.sin(rotating_angle/DEGREES_OF_1RAD);
var final_speedX: Number = speedX * cos_ang - speedY * sin_ang;
var final_speedY: Number = speedX * sin_ang + speedY * cos_ang;
return {x_speed: final_speedX, y_speed: final_speedY};
}
これは、新しい速度ベクトルが計算される方法です...
私の質問は、誰かがこの種の問題に直面したことがありますか、またはこれが起こらないようにする方法について何らかのアイデアを持っていますか?