ゲーム 補足説明

【イライラ棒】当たり判定の処理について考える。

2017/06/10

 

こんばんは。えいたです。

イライラ棒はプレイして頂けましたか?

当たり判定はイライラ棒にとって、最も重要な処理です。

当たっていないのに失敗と判定されたら、ゲームとして成立しないですよね。

当たった/当たっていないの判定は100%正確に判定する必要があります。

  • 成功:赤い部分がGOALに触れる
  • 失敗:赤い部分がフレームに触れる

元広島東洋カープ達川光男氏のデッドボールはゲームではバグ扱いです。

今回の記事は当たり判定の処理について考えます。

 

スポンサーリンク

座標で判定する

赤い部分の座標を取得して、各部品の座標と比較する方法です。

各フレームに対して、以下の処理を記入します。

if( 赤い部分のX座標){
 失敗処理を行う
}

簡単にかけば、上記の処理になります。

赤い部分におけるX,Y座標の双方がフレーム中に入っていたら失敗とします。

上記の画像を見て下さい。赤い部分がフレームに触れていることが確認できます。

Y座標は際どいですが、触れていますよね。

しかし、僕がイライラ棒を制作するときは座標で判定をしていません。

座標以外で判定できるの?と思いますよね。

 

メソッドを利用する

メソッドとは「プログラムの内部を知らなくても利用できる操作」を指します。

先人の知恵は利用しなきゃ、もったいないですよね!

Flashで用いるActionScriptでも当たり判定で使用するメソッドがあります。

hitTest()メソッドです。使い方は簡単です。

if( フレーム.hitTest(赤い部分)){
 失敗処理を行う
}

上記のプログラムで座標を判定する場合と同様の効果があります。

 

hitTest()メソッドの弱点

イライラ棒をプレイしてみて、「フレームが全て四角で統一されている理由」が気になりませんか?

本家のイライラ棒には丸や三角の障害物があるのでリアリティに欠けますよね。

その答えは下記の画像にあります。

HitTest()メソッドでは赤い部分も当たり判定と見なすためです。

部品のX,Y座標の最小/最大を用いて判定するので丸や三角も四角として判別されるためです。

これを解決するには座標で判断するしかないのですが、処理が複雑になります。

 

さいごに

Flashではイライラ棒に丸や三角を取り入れることは難しいです。

しかし、他の言語ではどうでしょうか?

画像領域に対して判定してくれる便利なメソッドが存在するかも?ですよね。

理想は制作するゲームに対して、適切なプログラム言語を選択することです。

僕は不器用なのでFlashを用いていますが、あなたならきっとできるはず!頑張れ!

 

広告(関連)

-ゲーム, 補足説明