2009/05/07(木)ブロック崩し
そういえば5月に入ってから日記を書いていないじゃないか。
ブロック崩しを作っている。
作っているといっても、まだ、1文字もコードは書いてないので
作ろうかなぁと考えていると言った方が正しいか。
簡単だと思っていたけど1つわからないことがでてきてしまった。
ボールが長方形であるブロックにぶつかったときに、
X軸速度成分を反転するのか、Y軸速度成分を反転するのか。
これを判定するスマートなアルゴリズムとはなんだろか。
ブロックの縦横の辺の長さの比とatanを使う?
ボールの半径分太らせた長方形を用意して、ボ線分と円の交差ール中心が今どの矩形内に収まっているかを判定する?
ブロックの4辺に対して、線分と円の交差判定を適用する?
いずれの方法でもやればできそうなのだけど、なにぶん面倒くさがりなもので。
それに、ボールは離散時間上を動くわけでブロックや壁にめり込む。
単に衝突を矩形判定してると、2つのブロックに同時にぶつかりうる。
よくよく考えないと2回反射して貫通弾になってしまうだろう。
現フレームで移動するはずのブロックの軌道を線分で表して、
衝突面での反射をシミュレーションするとか。
ブロックを円にするという誰もが思いつきそうなアイディアを採用すると、
当たり判定は円判定になって、反射方向はベクトルを射影して計算するーとか。
でも、よりうまく反射させるには、同じように軌道を線分化、
ボール半径分太らせたブロック円との交差判定、
めり込むはずだった分の距離を、その交点で反射、か……。
とまぁ、改めていろいろ考えてみると、
アクションゲーム作りを学ぶにはブロック崩しはなかなかいい題材なのかも。
そのうちプロジェクト自体放り出しそうだなぁω