3

私は最近 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([クラス TiledTileLayer])

フィールド tileArray を持つ TiledTileLayer である場合、なぜうめき声を上げているのでしょうか?

ソースコード ( https://github.com/HaxeFlixel/flixel-addons/blob/dev/flixel/addons/editors/tiled/TiledMap.hx#L135 ) を見て、TiledTileLayer は TiledLayer を継承しています。Layers は TiledLayer 型の配列なので、これがうめき声の理由だと思います。配列が TiledLayer の子オブジェクトを格納していることははっきりとわかりますが、それらの子の小道具/メソッドにアクセスするとすぐに、にそのフィールドがないことを訴えますか? 非常に紛らわしいです!

実行するには、次のコマンドを使用します: C:\HaxeToolkit\haxe\haxelib.exe runlim test flash -debug -Dfdb

ありがとうございました!

4

1 に答える 1

1

フィールド tileArray を持つ TiledTileLayer である場合、なぜうめき声を上げているのでしょうか?

このTiledTileLayer場合はそうかもしれませんが、常にそうであるとは限りません。結局のところ、それは aまたはa (フィールドを持たない)である可能性があります。これは、リンクしたコードでうまく見ることができます。具体的な型は実行時にしかわかりませんが、エラーはコンパイル時に発生します。layersArray<TileLayer>TiledObjectLayerTiledImageLayertileArray

オブジェクトまたは画像レイヤーが存在しないことが確実にわかっている場合は、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の古いバージョン用に作成されたため、リンクしたチュートリアルではこれがなくても機能します。

于 2017-12-28T00:00:05.657 に答える