Hatena::ブログ(Diary)

群衆三世 RSSフィード

 | 

2010年05月01日

「クォータービューの2Dゲームでクリックしたとこへ歩かせる」の巻

| 10:09 |

 けいおん!!のOP、好きです。こんにちわ。

 また動画撮りましたよー。しゃべってますよー。「一番のキモ」が多すぎじゃねぇかと思う今日この頃、いかがお過ごしですか。。

 今回は、プレイヤーがクリックした場所へキャラクターを歩かせてみました。歩く速度が遅かったので、速めてみました。3コマのアニメーションで歩かせてるせいか、速度調整がうまくできない・・・。

 以下、自己満足。

クォータービュー故のアタリ判定の難しさ

 「クリックしたところへキャラクターを歩かせる」ということは、クリックしたのがどのマスかというのを判定しなければならないんですが、ややこしい事情があります。

 普通の正方形がならんだゲームなら単純な割り算でクリックされたマスか判定できます。

f:id:gunsyu3:20100501094010p:image

 しかし、見ての通り、クォータービューの場合はひし形なんですね。普通に大なり小なりではチェックできないんです。

f:id:gunsyu3:20100501094011p:image

 というわけで、座標系を一回、チェックしやすいように変換してやります。

普通の座標系とクォータービューの座標系の変換

 クォータービューの座標系っていうのは、画面に描くときの座標ね(X,Y)*1

 普通の座標系っていうのは、二次元配列の添え字を単純にかけ算した座標ね(x,y)。


 X = 40(x + y)

 Y = 20(x - y)


 マップの情報を元に画面を描く時にはこの変換式で座標を決定→画像を出力しています。

 40と20はマップチップのサイズですよ。


クォータービューの座標系から普通の座標系の変換

 上の式を連立方程式で逆算します。


 x = X - 2Y

 y = X + 2Y


 あとは割り算してあげれば、どのマスがクリックされたか分かるって寸法。


クォータービューでゲーム作ってる人へ

 ネットでほかにいい方法がないか調べて見たんですよ。

 そしたら予想通りというか何というか。

 この問題で悩んでる人がそれなりの数いるようなので、「俺はこうしましたよ」的な情報を書いてみました。

 ご参考になればうれしいです・・・。

関連記事

ゲームプログラミングのためのリアルタイム衝突判定

ゲームプログラマになる前に覚えておきたい技術


*1:要するにスクリーン座標。

MELMEL 2010/05/01 20:52 >この問題で悩んでる人がそれなりの数いるようなので

やはり悩みどころってのは
かぶるもんなんでしょうかねえ…

しかしそういう問題も
解決しやすくなった点では
いい世の中ですな…

AshAsh 2010/05/04 11:59 クォータービューのゲームも様々にあるのだから、
結構定石的なやり方もありそうな気がしますけどね……
私もちょっと探してみよ。

gunsyu3gunsyu3 2010/05/16 10:53 >MELさん
 頭を使う関係の作業は非常にやりやすくなりましたね〜。
 たいがい、気になったことを検索すると知恵袋とかで
 まったく同じ質問してる人がいますしね。

>Ashさん
 クォータービューのゲーム作る人(主に趣味で)って、
 案外少ないっぽいですよ。
 やはりめんどくさいし、高さとか考え出すとZソートが(ry

 定石は多々ありそうですよね!
 是非探してみてください><;

 |