Haxe - 为什么我无法访问子项的属性而不收到父项没有给定属性的错误?



我最近进入了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>,因此它也可能是TiledObjectLayerTiledImageLayer 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制作的。

相关内容

  • 没有找到相关文章

最新更新