この記事のURL

http://www.dango-itimi.com/blog/archives/2006/000880.html


FLASH tips update ピンボールバーの処理 途中2

途中経過2。バグ修正と各反射に必要なパラメータ調整、並びに衝突反射処理の処理内容変更。

サンプル1

swf画面クリック後、左矢印キーでバーが動きます。押しっぱなしでバーは最上段で留まります。

各パラメータ
バーの質量 : 3
バーのはねかえり係数 : 0.5
ボールの質量 : 1
重力加速度 : 3.8

バー動作時のボール衝突処理における問題点とメモ

以前エントリーで書いた、【 バー動作時のボール衝突処理 】におきまして、この処理を実装すると問題が発生してしまいました。

ボールの位置がバー移動前の位置にとても近い場合、バーがボールに衝突する際のバーの接線速度が極めて小さなものになってしまいます。この小さな接線速度を用いてボールとの衝突処理を行っても、ボールの衝突後の反射位置はほぼ変わりません。
ボールの位置がバー移動エリア内から外に出るまで衝突反射処理を再帰で呼び出す必要があるため、衝突反射処理後ボールの位置がほぼ変わらないと、いつまでたっても処理ループを抜けてくれませんでした。そしてあっというまに256回呼び出し制限に引っかかり、無限ループ扱いに。結果、何か考えが足りないか間違っていることに気付きました。

そもそも処理行数の多い衝突反射処理を単一フレーム内で何度も呼び出すことは、CPUに負荷を与え 性能のよくない携帯端末では止まってしまうこと必須なので、なんとか別の方法を考えるべきであります。現在はとりあえずとして、バー動作時のボールへの衝突反射処理は多少ごまかしで行くことに。次のサンプル2がごまかしの衝突反射モデルです。

サンプル2

紺点・青点・赤点・黄点・緑点はドラッグ&ドロップが可能です。
ピンク点は無視してください。

紺点 : ボール現在位置
青点 : ボール移動予定位置
紺点から青点の線 : ボール軌道

緑点から赤点の線 : バー現在位置
緑点から黄点の線 : バー移動予定位置
赤点黄点緑点に囲まれるエリア : バー移動エリア

茶点   : ボール反射位置
水色点 : ボール反射調整位置

衝突反射処理後、ボール反射位置(茶点)がバー移動エリア外に出ていない場合、ボール軌道直線状のバー移動エリア外枠へとボール位置を調整しています。
これにより、反射衝突処理は1フレーム間で一回に留めることができます。しかしバーとボールとの衝突位置が角度1度ずれるだけで反射方向が大きく変わってしまう場合が存在してしまいます。

[ FLASH ] [ tips ] [ update ] 投稿者 siratama : 2006年05月06日 17:07

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/840

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]