ピンボールのバーの処理 メモ
ピンボールのバーの処理において、まとまった考えをメモ。
まだ実装部分にほとんど手を触れていないので、間違っていたり考えが足りない部分がある恐れがあります。
【 バーとボール衝突時の各々の衝突後の速度を求める処理 】
バー動作時、バーとボールが衝突した時のそれぞれの衝突後の速度の求め方
参考書にある「運動量保存の法則」と「一直線上の衝突の式」を用いて求めます。
m1v1i + m2v2i = m1v1f + m2v2f (v1f - v2f) = -e(v1i - v2i) m:物体の質量 v:速度 1:物体1 2:物体2 i:衝突時 f:衝突後 e:はねかえり係数 (0~1)を任意に指定
バーがボールに衝突する時のバーの速度の求め方
バーの速度はバーの回転運動における接線速度とします。
Vt=ωr Vt:接線速度 ω:瞬間角速度 r:円の半径
この処理では「バーとボールが衝突した時の 衝突後の速度」を求める事はできますが、「いつ(どのような時に)」「どこで(どの位置で)」衝突したのかは求めることはできません。別途考える必要があります。
また、バーは固定されており、ボールとの衝突後 バー自身に働く力は固定した部分へ分散され反発して移動するということはないとしますので、バーの衝突後の速度は求める必要はありません。
【「バー動作時のボールへの衝突処理」と「ボール動作時のバーへの衝突処理」の処理順序 】
単一スレッドで処理する順序としては、「バー動作時のボールへの衝突処理」を先に行いその後に「ボール動作時のバーへの衝突処理」を行います。
「ボール動作時のバーへの衝突処理」は今まで練習として作成してきた「衝突と反射処理」に加え、バーの回転動作速度による反射率の影響を考慮する事により求めることが可能になります。
【 図 説明 】
全て1フレーム間での位置を示します。
紺点 : ボール現在位置
青点 : ボール移動予定位置
紺点から青点の線 : ボール軌道
緑点から赤点の線 : バー現在位置
緑点から黄点の線 : バー移動予定位置
赤点黄点緑点に囲まれるエリア : バー移動エリア
緑点から右側部分のバーエリア : ゲーム画面左側のバー移動エリア
緑点から左側部分のバーエリア : ゲーム画面右側のバー移動エリア
【 バー動作時のボールへの衝突処理 】
「いつ(どのような時に)」バー動作時ボールに衝突したのかを調べるには
ボールの位置がバー移動エリア内にある場合、衝突していると判定します。
「どこで(どの位置で)」バー動作時ボールに衝突したのかを調べるには
ボールの位置がバーとの衝突位置です。
ボールの位置とバーの回転軸となる中心点を結んだ線が、ボールに衝突するバーのイメージとなり、そこからボール衝突時のバーの接線速度を求めます。
注意点
ボール移動速度により、一度この処理を行っただけでは反発したボール移動予定先位置がバーの移動エリア外にでない恐れがあります。ボール反射処理後、更にバーの移動エリア内にボールが存在するかどうかを再帰的に同処理を呼び出す必要があります。
【 ボール動作時のバーへの衝突処理 】
「バー動作時のボールへの衝突処理」によりボールの反射処理が行われた場合、この「ボール動作時のバーへの衝突処理」は行いません(行ってはいけません)。
「いつ(どのような時に)」ボール動作時バーに衝突したのかを調べるには
ボール移動軌道の線がバー移動後の線に交差しているとき衝突していると判定します。それ以外は全てバーとは衝突していないものとします。
「どこで(どの位置で)」ボール動作時バーに衝突したのかを調べるには
ボール移動軌道の線がバー移動後の線に交差した交点が衝突位置となります。
バーの移動速度を考慮し反射位置を決定する
バーは静止している場合と動作している場合の二パターンの状態があります。バー動作時にボールが衝突した場合、ボールの反射ベクトルにバーの移動速度を加算します。
注意点
衝突位置からボール反射位置までの間に他のオブジェクトと衝突する恐れがあることを考える必要があります。ボールが衝突する対象はバーだけではありません。
以上の感じでそれらしいものにできますかなあ。
[ FLASH ] [ GRAPHIC ] [ tips ] 投稿者 siratama : 2006年04月03日 19:49
あの、記事と関係ない上に揚げ足取りで申し訳ないんですが、amazonのどうぶつの森の
>>ファミコンカセットなどを入手することが出来、自分の家でそのファミコンが遊べてしまったりもできます。
の所は、修正したほうがいいのではないかな~と思うわけです・・(´・ω・`)
投稿者 トースケ : 2006年04月04日 18:27