PR

タイルマップを使う

Cocos Code IDEとLua言語を使ったサンプルコードと例文集です。

ゲームのマップをタイルを並べて作ったものがタイルマップです。手軽にゲーム用のマップを作り、画面に表示することができます。

タイルマップの作成にはTiled Map Editorなどのソフトを使います。

サンプルコード

プロジェクトの新規作成で作成されるGameScene.luaのGameScene.create()を下記のサンプルコードと書き換えます。
ここではタイルマップをtiledmap.tmxの名前で、タイルセットの画像とともにプロジェクトに加えています。

function GameScene.create()
    local scene = GameScene.new()

    local tiledMap = cc.TMXTiledMap:create("tiledmap.tmx")
    scene:addChild(tiledMap)

    -- 縦と横のタイル数
    print(string.format("mapsize %f, %f", tiledMap:getMapSize().width, tiledMap:getMapSize().height))

    -- タイルのサイズ
    print(string.format("tilesize %f, %f", tiledMap:getTileSize().width, tiledMap:getTileSize().height))

    -- プロパティを取得
    print(string.format("%s", tiledMap:getProperty("mapname")))

    -- 名前を指定してタイルマップのレイヤーを取得
    local tiledMapLayer = tiledMap:getLayer("background")

    -- タイルの座標からGIDを取得
    local gid = tiledMapLayer:getTileGIDAt(cc.p(0, 1))
    print(string.format("GID %d", gid))

    -- タイルの座標からタイルのスプライトを取得
    local tileSprite = tiledMapLayer:getTileAt(cc.p(0, 0))
    tileSprite:setColor(cc.c4b(255, 0, 0, 255))

    -- タイル座標を指定してGIDを設定する
    tiledMapLayer:setTileGID(2, cc.p(0, 14))

    -- レイヤーのサイズ
    print(string.format("layer size %f, %f", tiledMapLayer:getLayerSize().width, tiledMapLayer:getLayerSize().height))
    print(string.format("layer ContentSize %f, %f", tiledMapLayer:getContentSize().width, tiledMapLayer:getContentSize().height))


    return scene
end

タイルマップを使う例文

tmxファイルからタイルマップを読み込む

local tiledMap = cc.TMXTiledMap:create("tiledmap.tmx")
scene:addChild(tiledMap)

マップサイズ(タイル数)を得る

マップサイズを得るにはgetMapSiz()メソッドを使います。

local size = tiledMap:getMapSize()
-- size.width, size.height

タイルのサイズを得る

タイルの画像サイズを得るにはgetTileSize()メソッドを使います。

local size = tiledMap:getTileSize()
-- size.width, size.height

マップのプロパティを得る

マップに設定されたプロパティを得るにはgetProperty(propertyName)メソッドを使います。

local property = tiledMap:getProperty("mapname")

名前を指定してタイルマップのレイヤーを取得する

レイヤーを取得するにはgetLayer(layerName)メソッドを使います。

local tiledMapLayer = tiledMap:getLayer("background")

名前を指定してオブジェクトグループを取得

オブジェクトグループを取得するにはgetObjectGroup(groupName)メソッドを使います。

local objectGroup1 = tiledMap:getObjectGroup("objectGroup1")

オブジェクトを取得するには、上で取得したTMXObjectGroupのインスタンスに対してgetObject(objectName)メソッドを使います。

local object1 = objectGroup1:getObject("object1")
-- object1.xやobject1.name、object1.points等でオブジェクトのプロパティにアクセスできる。

レイヤーの例文

レイヤーでタイル座標からGIDを取得する

レイヤーでタイル座標からGIDを取得するにはgetTileGIDAt(tileCoordinate)メソッドを使います。

local gid = tiledMapLayer:getTileGIDAt(cc.p(0, 1))

レイヤーでタイル座標を指定してGIDを設定する

レイヤーでタイル座標を指定してGIDを設定するにはsetTileGID(gid, tileCoordinate)メソッドを使います。

tiledMapLayer:setTileGID(2, cc.p(0, 14))

レイヤーでタイル座標からタイルのスプライトを得る

レイヤーでタイル座標からタイルのスプライトを得るにはgetTileAt(tileCoordinate)メソッドを使います。

local tileSprite = tiledMapLayer:getTileAt(cc.p(0, 0))

レイヤーでタイル座標からタイルの座標値を得る

レイヤーでタイル座標から表示されている座標値を得るにはgetPositionAt(tileCoordinate)メソッドを使います。

local pos = tiledMapLayer:getPositionAt(cc.p(0, 15))
Copyright(C) 2014 - 2015 「Cocos Code IDEとLua言語でゲームを作る」逆引き辞典for Lua All rights Reserved.