我最近进入了haxe,刚开始使用haxeflixel加载瓷砖.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似乎对人有效。
所以我想检查图层对象是否是瓷砖式富特耶,或者瓷砖层,以及以下内容:
trace(Type.typeof(layer));
肯定的产量:
playstate.hx:24:tClass([class tiledtilelayer])
因此,如果它是一个具有tilearray场的瓷砖工具,为什么会mo吟?
我查看了源代码(https://github.com/haxeflixel/flixel-addons/blob/dev/dev/flixel/addons/editors/editors/filed/tiledmap.hx#l135)和tiledtiltilelelelayer senterits the tilelelayer sentarites层是一系列类型的TileDlayer,所以我认为这就是为什么它在mo吟的原因。我可以清楚地看到该阵列正在存储Tiledlayer的子对象,但是一旦我访问这些孩子的任何道具/方法,它就会抱怨 parent 没有该领域?非常混乱!
运行我正在使用此命令:c: haxetoolkit haxe haxelib.exe运行lime test flash -debug -debug -dfdb
谢谢!
因此,如果它是一个具有tilearray场的瓷砖工具,为什么会mo吟?
可能是情况下的TiledTileLayer
,但情况并非总是如此。layers
毕竟是Array<TileLayer>
,因此它也可能是TiledObjectLayer
或TiledImageLayer
( nome 具有tileArray
字段)。在您链接的代码中可以很好地看到这一点。混凝土类型只能在运行时知道,但是您在编译时发生的错误。
如果您确定不会有任何对象或图像层,则只需将其投入到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制作的。