我最近进入Haxe并开始使用HaxeFlixel加载Tiled .TMX文件。
我正在创建一个TiledMap对象并将其传递给TMX文件路径,然后我想迭代该对象中的图层以将它们添加到游戏场景中。但是,当我尝试访问.tileArray(这是TiledTileLayer的属性)时,我收到以下错误: -
flixel.addons.editors.tiled.TiledLayer没有字段tileArray
这是代码:
package;
import flixel.FlxState;
import flixel.tile.FlxTilemap;
import flixel.addons.editors.tiled.TiledMap;
import openfl.Assets;
class PlayState extends FlxState
{
private var _tiled_map:TiledMap;
override public function create():Void
{
_tiled_map = new TiledMap("assets/data/Map1.tmx");
for(layer in _tiled_map.layers){
var layerData:Array<Int> = layer.tileArray;
}
super.create();
}
override public function update(elapsed:Float):Void
{
super.update(elapsed);
}
}
我发现了以下示例 - http://coinflipstudios.com/devblog/?p=182似乎对人们有用。
所以我想检查图层对象是否应该是TiledTileLayer,或TiledLayer,具体如下:
trace(Type.typeof(layer));
哪个肯定足够的产量:
PlayState.hx:24:TClass([class TiledTileLayer])
所以如果它是TiledTileLayer,它有字段tileArray为什么它在呻吟?
我查看了源代码(https://github.com/HaxeFlixel/flixel-addons/blob/dev/flixel/addons/editors/tiled/TiledMap.hx#L135),TiledTileLayer继承自TiledLayer。图层是TiledLayer类型的数组,所以我认为这就是为什么它在呻吟。我可以清楚地看到数组存储了TiledLayer的子对象,但是一旦我访问了那些子节点的任何道具/方法,就会抱怨父节点没有那个字段?很混乱!
要运行我正在使用此命令:C:\ HaxeToolkit \ haxe \ haxelib.exe运行lime test flash -debug -Dfdb
谢谢!
所以如果它是TiledTileLayer,它有字段tileArray为什么它在呻吟?
在这种情况下,它可能是一个TiledTileLayer
,但情况可能并非总是如此。 layers
毕竟是Array<TileLayer>
,所以它也可能是TiledObjectLayer
或TiledImageLayer
(没有tileArray
场)。这可以在the code you linked很好地看到。具体类型只能在运行时知道,但是您在编译时遇到错误。
如果您确定不会有任何对象或图像层,您可以将它投射到TiledTileLayer
。但是,为了安全起见,最好事先检查一下类型:
for (layer in _tiled_map.layers) {
if (Std.is(layer, TiledTileLayer)) {
var tileLayer:TiledTileLayer = cast layer;
var layerData:Array<Int> = tileLayer.tileArray;
}
}
它没有这个用于您链接的教程,因为它是为较旧版本的flixel-addons制作的。