Haxe - Why can I not access a child's attribute without getting an error that the parent does not have the given attribute?
我最近开始涉足Haxe,刚开始使用HaxeFlixel加载Tiled .TMX文件。
我正在创建TiledMap对象,并将其传递给TMX文件路径,然后我要遍历该对象中的图层以将它们添加到游戏场景中。但是,当我尝试访问.tileArray(这是TiledTileLayer的属性)时,出现以下错误:-
flixel.addons.editors.tiled.TiledLayer has no field tileArray
这是代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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,并具有以下内容:
1 | 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
谢谢!
So if it is a TiledTileLayer which has the field tileArray why is it moaning?
在这种情况下,它可能是
如果您确定没有任何对象或图像层,则可以将其强制转换为
1 2 3 4 5 6 | for (layer in _tiled_map.layers) { if (Std.is(layer, TiledTileLayer)) { var tileLayer:TiledTileLayer = cast layer; var layerData:Array<Int> = tileLayer.tileArray; } } |
在您链接的教程中,如果没有此功能,它将无法正常工作,因为它是针对较旧版本的flixel-addons开发的。