Cocos2d-html5で TiledMapEditorのデータをもとに当たり判定のある壁を作る

1.TiledMapEditorのレイヤーであたり判定用のレイヤーを作成して書き出す。

ここでは「collidable」という名前で当たり判定用のレイヤーを作成し、そのレイヤーに草を配置しました。
baseレイヤーには土のマップチップが配置されています。(TiledMapEditorの使い方は前回の記事を参照)

2.cocos2d-html5の中であたり判定をつくる。

    init:function () {
        this._super();

        this.obstacles = [];

        //TMXTiledMapでデータを取得するのは前回と同じ
        cc.Director.getInstance().setProjection(cc.DIRECTOR_PROJECTION_2D);
        var tilemap = cc.TMXTiledMap.create("res/test_map.tmx");
        this.mapNode.addChild(tilemap,1);

        var mapWidth   = tilemap.getMapSize().width;
        var mapHeight  = tilemap.getMapSize().height;
        var tileWidth  = tilemap.getTileSize().width;
        var tileHeight = tilemap.getTileSize().height;

        //TiledMapEditorのレイヤーで設定した名前を取得する
        var collidableLayer = tilemap.getLayer("collidable");
        for (i = 0; i < mapWidth; i++){
            for (j = 0; j < mapHeight; j++){

            	//タイルコードを取得できる
                var tileCoord = new cc.Point(i, j);
                
                //タイルコードからgidを取得する。もしgidが存在していれば当たり判定するオブジェクトとして扱う
                var gid = collidableLayer.getTileGIDAt(tileCoord);
                if(gid) {
                    var tileXPositon = i * tileWidth;
                    var tileYPosition = (mapHeight * tileHeight) - ((j+1) * tileHeight);

                    //タイルが存在しているので、あたり判定するための矩形を作成する
                    var square = cc.LayerColor.create(cc.c3b(255,0,0),50,50);
                    square.setPosition(tileXPositon,tileYPosition);
                    this.obstacles.push(square);
                    this.mapNode.addChild(square);
                    square.setPosition(tileXPositon,tileYPosition,3);
                }
            }
        }
    }

    update:function(dt){
        this._super();

        //壁との衝突判定
        for(var i=0;i<this.obstacles.length;i++){
            var obstacle = this.obstacles[i];
            //たとえばplayerというオブジェクトが存在していたとしたら、壁との距離を取得して一定以下の場合は衝突とみなす
            var distance = cc.pDistance(this.player.getPosition(),obstacle.getPosition());
            if(distance < 30){
                //cc.log("hit!!:[" + i + "]");
            } 
        }
    }