99/07/21 あたり判定を考えまくり始める


−−−あたり判定とは?

「あたり判定」というのは、読んで字のごとく
「物体と物体が衝突しているかを判定する」ということです。
「あたっている」ということは、うすっぺらい二次元の世界では
「重なっている」と解釈することもできます。
つまり、この「重なっている」ということがわかれば、あたり判定を行うことができます。

しかし、この「重なっている」というのを判定するには、いくつかの
「情報」が必要です。人間というやつは、目でそのおおよその判断をやりますが、
コンピュータには視覚というやつがないので、その代わりにいくつかの「情報」を
与えてやるわけですね。

この「情報」というのは、基本的に「物体の位置、大きさ」この二つでOKです。
さて、ではこの情報を使ってどのように判定すればよいのでしょうか。

僕たちのすんでいる世界のように、綿密な判定をしているとかなり時間を
食ってしまいますのである程度「適当」で済ませます。この適当具合が
難しいところなのですが、ゲームで遊んでいる人に違和感を感じさせない
ようなものであれば、ぜんぜん問題がありません。
しかし、判定をしたときに重なっている面積を計算して、「かすった」など
あたり具合を細かくしてやれば、多少「リアルに」見せることができます。
この辺は、プログラムを組む人の工夫次第でどうにでもなります。
たとえば。格闘ゲームで頭、体など「どこにあたったかを分ける」...とか。

ところで「適当」な判定にも代表格があります。
市販ゲームとなるとわかりませんが、オンラインソフトなどでは
大抵がこの「適当」な判定が使われていると思います。
一つは「四角形(長方形)」、もう一つは「円」を使った判定方法です。
イメージとしては下図のようになります。

Fig.1

どちらの方法も、簡単な計算で求まります。
というわけで、実際にどういうふうになるかを考えていくことにしましょう。


−−−あたり判定を考える

1.四角形を使った判定

まずは、四角形を使った方法です。
図から見て、片方の四角形のある点が他方の四角形の内部にあれば
重なっている、といえそうですね。というかいえますね(^^;)
図にすると、次の通りです。

Fig.2

どうやら、四パターン調べればできそうです。
実際には、一つのパターンに付き、四つの条件が要ります。
つまり、4×4で16この条件が必要となりますね。 しかし、これをコードで書いてみると、結構長いものになります。
そこで、もう少し別の方法を考えてみることにしましょう。

それでは、図をじっくりと見てください。

よく見ると、 赤い四角形の左の辺は、常に緑の四角形の右の辺よりも左にあります。
逆に、赤い四角形の右の辺は、常に緑の四角形の左の辺よりも右にあります。
また、赤い四角形の上の辺は、常に緑の四角形の下の辺よりも上にあります。
逆に、赤い四角形の下の辺は、常に緑の四角形の上の辺よりも下にあります。

このように考えると、四つの条件のみで判定することができます。
コードもこっちの方がサッパリしています。

2.円を使った判定

次は円を使った方法です。
四角形を使った方法とは違い、どっちが右側にある、とかいう位置関係は
まったく必要ありませんが、中学校程度(?)の数学の知識がいります。

実際にどうやって求めるかというと、二つの円の中心の距離を求めるのです。
そして、その距離が二つの円の半径の和よりも小さければ重なっていることになります。


−−−比較

さて、それではどちらの方がいいのでしょうか。
といって比べてみても、実は互いに「得意な分野」というものがあります。

もしあなたが何の変哲もない2Dゲームを作りたいなら四角形を使った判定で
いいのですが、登場するキャラクタがぐりぐり回転する3D(2D)ゲームを作りたいなら
円を使った判定、というように使い分けるといいでしょう。円というのもは
どれだけ回転しても形が変わらないので、3次元の世界では非常に判定しやすいのです。
実際、僕の知っている有名なゲームプログラマの方も、円のあたり判定を
利用しています(^^;)


もどる