FlxTilemap
API Reference > flixel.tile > FlxTilemap
FlxTilemap
FlxTilemapはタイル情報をロードして、当たり判定や描画を行うことができます。
- FlxTilemap
- 定数
- フィールド
- メソッド
- loadMap() : マップデータの読み込み
- loadMapFromCSV() : マップデータの読み込み(CSV)
- loadMapFromArray() : マップデータの読み込み(数値配列)
- setCustomTileMappings() : カスタムタイルマッピングおよび/またはロードする前にランダム化ルールを設定します
- drawDebugOnCamera() : デバッグ描画をします(デバッグ時のみ有効)
- draw() : タイルマップバッファをカメラに描画します
- getData() : タイルマップの数値配列を取得します
- setDirty()
- findPath() : 開始点から終了点に到達できる経路を求めます
- overlap()
- overlapAt()
- overlapwithCallback()
- overlapPoint()
- getTile() : XY座標指定でタイルの値を取得します
- getTileByIndex()
- getTileColiisions()
- getTileInstances()
- getTileCoords()
- setTile() : XY座標指定でタイルの値を設定します
- setTileByIndex()
- setTileProperties()
- follow()
- getBounds()
- ray()
- updateFrameData()
- tileToFlxSprite()
- updateBuffers()
- computePathDistance()
- Tips
定数
FlxTilemapAutoTiling(タイリングモード)
定数名 | 値 | 説明 |
OFF | 0 | 自動でタイリングをしない |
AUTO | 1 | 薄い内側壁をルールに従って自動配置します (オートタイル) |
ALT | 2 | 厚い内側壁を配置します |
フィールド
widthInTiles?:Int = 0 : タイルが横に並んでいる数
loadMap() のMapDataにArray<Int>を指定した際に使用されます。 そのため、 loadMap() を呼び出す前に設定する必要があります。 loadMap() 呼び出し後は変更してはいけません
heightInTiles?:Int = 0 : タイルが縦に並んでいる数
loadMap() のMapDataにArray<Int>を指定した際に使用されます。 そのため、 loadMap() を呼び出す前に設定する必要があります。 loadMap() 呼び出し後は変更してはいけません
メソッド
loadMap() : マップデータの読み込み
- 引数
- MapData?:Dynamic : マップデータ
コリジョンとして使用する場合「0」が通過可能なタイルとなります。 1以上を指定するとコリジョンとなります。
- MapData?:Dynamic : マップデータ
- TileGraphic?:Dynamic : タイリングされた画像データ
- TileWidth?:Int = 0 : タイルの幅
0の場合は画像全体の幅となります
- TileHeight?:Int = 0 : タイルの高さ
0の場合は画像全体の高さとなります
- AutoTile?:FlxTilemapAutoTiling = 0 : タイリングモード
OFF/AUTO/ALTのいずれかを指定します
- StartingIndex?:Int = 0 : 無効なタイルとする番号
デフォルトの`0`を指定するのが安全です。AUTOを指定した場合、この値は無視されます
- DrawIndex?:Int = 1 : 有効な(描画する)タイルの開始番号
AUTOを指定した場合、この値は無視されます
- CollideIndex?:Int = 1 : コリジョンとして扱うタイルの開始番号
AUTOを指定した場合、この値は無視されます。 (このクラスを継承し、setTilePropertiesをオーバーライドすることで衝突の動作をカスタマイズすることができます)
- 戻り値 : FlxTilemap
loadMapFromCSV() : マップデータの読み込み(CSV)
- 引数
- MapData?:Dynamic : マップデータ。カンマ区切りの文字列(CSV[String])を指定します
- 戻り値 : FlxTilemap
loadMapFromArray?() : マップデータの読み込み(数値配列)
- 引数
- MapData?:Dynamic : マップデータ。数値配列(Array<Int>)を指定します
数値配列を指定する場合にはあらかじめ、 widthInTiles / heightInTiles にタイルの横の数と縦の数を設定しておく必要があります
- MapData?:Dynamic : マップデータ。数値配列(Array<Int>)を指定します
- 戻り値 : FlxTilemap
setCustomTileMappings?() : カスタムタイルマッピングおよび/またはロードする前にランダム化ルールを設定します
これはloadMap()の前に呼び出す必要があります。
注意
このメソッドを使用すると、マップのロードに時間がかかるようになります。非常に大きなタイルマップでこれを使用する場合には注意が必要です。
- 引数
- mappings:Array<Int> : タイルを再マッピングするためのパラメータです。
例: [7,4,12] を指定すると "0-->7, 1-->4, 2-->12" というマッピングとなります
- randomIndices:Array<Int> = null
Array of ints indicating which tile indices should be randmoized. Ex: [7,4,12] means "replace tile index of 7, 4, or 12 with a randomized value"
- randomChoices:Array<Array<Int>> = null
A list of int-arrays that serve as the corresponding choices to randomly choose from, Ex: indices = [7,4], choices = [[1,2],[3,4,5]], 7 will be replaced by either 1 or 2, 4 will be replaced by 3, 4, or 5.
- randomLambda:Void->Float = null
A custom randomizer function, should return value between 0.0 and 1.0. Initialize your random seed before passing this in! If not defined, will default to unseeded Math.random() calls.
- mappings:Array<Int> : タイルを再マッピングするためのパラメータです。
- 戻り値 : Void
drawDebugOnCamera?() : デバッグ描画をします(デバッグ時のみ有効)
draw() : タイルマップバッファをカメラに描画します
getData() : タイルマップの数値配列を取得します
- 引数
- Simple:Bool = false : trueの場合1または0のシンプルなデータをコピーとして返します(これは自動タイリングに便利です)。 falseの場合は実際のデータの参照を返します
- 戻り値:Array<Int> : タイルデータの数値配列
setDirty()
findPath() : 開始点から終了点に到達できる経路を求めます
コリジョンがある場合にはそれを避けて経路探索を行います。
- 引数
- 戻り値 : Array<FlxPoint> 経路座標配列
終了点にたどりつかない場合は`null`
overlap()
overlapAt()
overlapwithCallback()
overlapPoint()
getTile() : XY座標指定でタイルの値を取得します
- 引数
- X:Int : X座標
- Y:Int : Y座標
- 戻り値 : タイルの値
getTileByIndex?()
getTileColiisions?()
getTileInstances?()
getTileCoords?()
setTile() : XY座標指定でタイルの値を設定します
- 引数
- X:Int : X座標
- Y:Int : Y座標
- Tile:Int : タイル値
- UpdateGraphics?:Bool = true : このタイルのグラフィックを変更するかどうか
- 戻り値:Bool : タイルを変更できたかどうか
setTileByIndex?()
setTileProperties?()
follow()
getBounds()
ray()
updateFrameData?()
tileToFlxSprite?()
updateBuffers()
computePathDistance?()
Tips
loadMap() でタイル情報を読み込んでコリジョンとして使用する場合の注意点
「0」が通過可能なタイルとなります。1以上を指定するとそのタイルはコリジョンとなります。
経路探索のサンプル
公式のデモのタワーディフェンスゲーム「MinimalistTD」から抜粋。
// グリッドサイズ var GRID_SIZE:Int = 8; // タイル画像をロードするか作っておく // アセットからロードする場合 var tileImage = Assets.getBitmap("assets/tiles.png"); // 24x8のタイル画像を作成する場合 //var tileImage = new BitmapData(GRID_SIZE * 3, GRID_SIZE, false, FlxColor.BLACK); //tileImage.draw( // new BitmapData(GRID_SIZE, GRID_SIZE, false, FlxColor.GRAY), // カベを灰色にする // new Matrix(1, 0, 0, 1, GRID_SIZE * 1, 0)); // CSVテキストを取得 var csvData = Assets.getText("assets/data/map.csv"); // CSVをマップデータとして読み込む var map = new FlxTilemap(). loadMapFromCSV(csvMap, tileImage); // FlxStateにadd()しておくと壁を描画してくれる this.add(map); // ■経路探索 (0, 1)から(8, 7)への経路を求める var START_X = GRID_SIZE * 0; // 座標はグリッド座標でなく実際の位置を指定する var START_Y = GRID_SIZE * 1; var END_X = GRID_SIZE * 8; var END_Y = GRID_SIZE * 7; var start = FlxPoint.get(START_X, START_Y); // 開始座標 var end = FlxPoint.get(END_X, END_Y); // 目的座標 // 経路を求める。辿りつけない場合は null を返す var pList:Array<FlxPoint> = map.findPath(start, end); // 経路に沿って移動させる var obj = new FlxSprite(pList[0].x, pList[0].y); var speed = 50; // 移動速度 var mode = FlxPath.FORWARD; // 動作モード(前に進む) var bAutoRotate = true; // 回転あり obj.path = new FlxPath(path, speed, mode, bAutoRotate);
タイルの描画について
タイル描画方法についてはこちらが詳しいです