Haxe - 为什么我不能在没有得到父级没有给定属性的错误的情况下访问子属性?

问题描述 投票:3回答:1

我最近进入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

谢谢!

haxe tiled tmx haxeflixel haxelib
1个回答
1
投票

所以如果它是TiledTileLayer,它有字段tileArray为什么它在呻吟?

在这种情况下,它可能是一个TiledTileLayer,但情况可能并非总是如此。 layers毕竟是Array<TileLayer>,所以它也可能是TiledObjectLayerTiledImageLayer(没有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制作的。

© www.soinside.com 2019 - 2024. All rights reserved.