libro
www.tuyano.com
初心者のためのenchant.jsゲームプログラミング入門

二次元マップを作ろう! (4/5)

作成:2012-10-21 10:41
更新:2012-10-21 10:41

■マップの通過設定をしよう

マップは、単純に部品を並べて表示を作れればおしまい、というものではありません。たいていは、作ったマップの上をキャラクタが動きまわったりして利用するわけです。となると、最低限考えなければならないのが「マップのその地点をキャラクタが通過できるかどうか」の設定でしょう。

例えばロールプレイングのマップのようなものを考えた場合、お城の城壁などがあればその先にはキャラクタは進めないようにしないといけません。縦横好きなようにどこまでも移動できてしまったらまずいのですから。

こうした「マップの通過設定」は、Mapオブジェクトに用意されている「collisionData」というプロパティで設定することができます。これは以下のように利用します。
《Mapオブジェクト》.collisionData = [[ ……2次元配列……]];
collisionDataは、マップデータと同様に二次元配列の形で設定します。マップデータは、表示するイメージのフレーム番号を配列でまとめますが、collisionDataの場合は、その場所を通過できるかどうかを表す数字を配列にまとめます。この数字は以下のようになります。
0:通過できる
1:通過できない
単純ですね! では、このcollisionDataによる設定はどのようにゲームで機能するのでしょうか。「キャラクタをこの上で移動すると指定した場所には移動できなくなる」……なんていうわけではありません。キャラクタそのものに「マップのここを通れるかどうか」がわかるわけではないのです。

通過できるかどうかは、Mapに用意されている「hitTest」というメソッドを利用します。これは以下のように呼び出します。
変数 = 《Mapオブジェクト》.hitTest( 横位置 , 縦位置 );
hitTestは、縦横の位置を指定すると、その位置が通過できるかどうかを調べて真偽値で返すものです。trueが返ると、「その場所は通過できない」ということを示します。falseならば問題なく通過できることになります。

したがって、キャラクタを動かすときには、移動したい位置をhitTestでチェックし、falseならばその場所に移動する、trueならば移動できない処理をする、というようにすればよいでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

※関連コンテンツ

「初心者のためのenchant.jsゲームプログラミング入門」に戻る