FlxTilemap の変更点


[[API Reference]] > [[flixel.tile]] > FlxTilemap


*FlxTilemap [#r08c4e55]
>FlxTilemapはタイル情報をロードして、当たり判定や描画を行うことができます。

----
#contents
----

* 定数 [#zb472f70]
** [[FlxTilemapAutoTiling>FlxTilemap#lbdda52d]](タイリングモード) [#lbdda52d]
|定数名|値|説明|h
|OFF|0|自動でタイリングをしない|
|AUTO|1|薄い内側壁をルールに従って自動配置します (オートタイル)|
|ALT|2|厚い内側壁を配置します|


----
* フィールド [#r2cc7cc1]
** widthInTiles:Int = 0 : タイルが横に並んでいる数 [#q8553e20]
 loadMap() のMapDataにArray<Int>を指定した際に使用されます。
 そのため、 loadMap() を呼び出す前に設定する必要があります。
 loadMap() 呼び出し後は変更してはいけません
** heightInTiles:Int = 0 : タイルが縦に並んでいる数 [#m0b6b0f4]
 loadMap() のMapDataにArray<Int>を指定した際に使用されます。
 そのため、 loadMap() を呼び出す前に設定する必要があります。
 loadMap() 呼び出し後は変更してはいけません
 
----
* メソッド [#zc1bd028]

** loadMap() : マップデータの読み込み [#z6e83d1e]
- 引数
-- MapData:Dynamic : マップデータ。カンマ区切りの文字列(CSV[String])、または数値配列(Array<Int>)を指定します
 数値配列を指定する場合にはあらかじめ、 
 widthInTiles / heightInTiles にタイルの横の数と縦の数を設定しておく必要があります

-- MapData:Dynamic : マップデータ
 コリジョンとして使用する場合「0」が通過可能なタイルとなります。
 1以上を指定するとコリジョンとなります。

-- TileGraphic:Dynamic : タイリングされた画像データ
-- TileWidth:Int = 0 : タイルの幅
 0の場合は画像全体の幅となります
-- TileHeight:Int = 0 : タイルの高さ
 0の場合は画像全体の高さとなります
-- AutoTile:[[FlxTilemapAutoTiling>FlxTilemap#lbdda52d]] = 0 : タイリングモード
 OFF/AUTO/ALTのいずれかを指定します
-- StartingIndex:Int = 0 : 無効なタイルとする番号
 デフォルトの`0`を指定するのが安全です。AUTOを指定した場合、この値は無視されます
-- DrawIndex:Int = 1 : 有効な(描画する)タイルの開始番号
 AUTOを指定した場合、この値は無視されます
-- CollideIndex:Int = 1 : コリジョンとして扱うタイルの開始番号
 AUTOを指定した場合、この値は無視されます。
 (このクラスを継承し、setTilePropertiesをオーバーライドすることで衝突の動作をカスタマイズすることができます)
- 戻り値 : FlxTilemap

** loadMapFromCSV() : マップデータの読み込み(CSV) [#t5a9e0e5]
- 引数
-- MapData:Dynamic : マップデータ。カンマ区切りの文字列(CSV[String])を指定します
- 戻り値 : FlxTilemap
** loadMapFromArray() : マップデータの読み込み(数値配列) [#lbc6e406]
- 引数
-- MapData:Dynamic : マップデータ。数値配列(Array<Int>)を指定します
 数値配列を指定する場合にはあらかじめ、 
 widthInTiles / heightInTiles にタイルの横の数と縦の数を設定しておく必要があります
- 戻り値 : FlxTilemap
** setCustomTileMappings() : カスタムタイルマッピングおよび/またはロードする前にランダム化ルールを設定します [#vdc87c57]
 これはloadMap()の前に呼び出す必要があります。
*** 注意 [#sf95622a]
このメソッドを使用すると、マップのロードに時間がかかるようになります。非常に大きなタイルマップでこれを使用する場合には注意が必要です。
- 引数
-- 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.
- 戻り値 : Void

** drawDebugOnCamera() : デバッグ描画をします(デバッグ時のみ有効) [#t340b554]
** draw() : タイルマップバッファをカメラに描画します [#l775d04b]
** getData() : タイルマップの数値配列を取得します [#md2aabb1]
-引数
--Simple:Bool = false : trueの場合1または0のシンプルなデータをコピーとして返します(これは自動タイリングに便利です)。
falseの場合は実際のデータの参照を返します
-戻り値:Array<Int> : タイルデータの数値配列

** setDirty() [#s68a0e5c]
** findPath() : 開始点から終了点に到達できる経路を求めます [#z3cefecb]
 コリジョンがある場合にはそれを避けて経路探索を行います。
- 引数
-- Start:FlxPoint : 開始点
-- End:FlxPoint : 終了点
-- Simplify:Bool = true : 重複を削除(デフォルト:true)
-- RaySimplify:Bool = false : 障害物を斜め移動することを許可する(デフォルト:false)
-- WideDiagonal:Bool = true : 斜め移動するための追加タイルが必要か(デフォルト:true)
- 戻り値 : Array<FlxPoint> 経路座標配列
 終了点にたどりつかない場合は`null`

** overlap() [#a1165afa]
** overlapAt() [#c08667ec]
** overlapwithCallback() [#bb90a158]
** overlapPoint() [#tdeaf586]
** getTile() : XY座標指定でタイルの値を取得します [#u7c99502]
- 引数
-- X:Int : X座標
-- Y:Int : Y座標
- 戻り値 : タイルの値
** getTileByIndex() [#h909cd32]
** getTileColiisions() [#y595ad6d]
** getTileInstances() [#reb08b4a]
** getTileCoords() [#x9cd3fd4]
** setTile() : XY座標指定でタイルの値を設定します [#k2902046]
-引数
-- X:Int : X座標
-- Y:Int : Y座標
-- Tile:Int : タイル値
-- UpdateGraphics:Bool = true : このタイルのグラフィックを変更するかどうか
- 戻り値:Bool : タイルを変更できたかどうか

** setTileByIndex() [#pccf9312]
** setTileProperties() [#c0e49628]
** follow() [#p470d2a6]
** getBounds() [#c74ad888]
** ray() [#k51fd8bf]
** updateFrameData() [#uccae677]
** tileToFlxSprite() [#x309858d]
** updateBuffers() [#wf5336e4]
** computePathDistance() [#bc741b37]

----
* Tips [#bd409a97]
** loadMap() でタイル情報を読み込んでコリジョンとして使用する場合の注意点 [#f4e77968]
「0」が通過可能なタイルとなります。1以上を指定するとそのタイルはコリジョンとなります。

** 経路探索のサンプル [#ub842061]
公式のデモのタワーディフェンスゲーム「MinimalistTD」から抜粋。
#geshi(Actionscript3){{
  // グリッドサイズ
  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);
}}

** タイルの描画について [#k9265c4c]

タイル描画方法についてはこちらが詳しいです

- [[Tilesheet rendering:http://haxeflixel.com/blog/01-HaxeFlixel-rendering/]]