Как загрузить простой файл TMX в Haxeflixel?

Я пытаюсь использовать простую карту tmx в своем приложении haxeflixel, используя библиотеку flixel-addons.

Моя карта TMX имеет один слой со всеми плитками в нем. В карте нет ничего особенного. Я попытался использовать демо TiledMap в качестве ссылки и удалил весь код, который, как мне казалось, мне не нужен.

Это мой индивидуальный класс карты;

class MapLoader extends TiledMap
{
    // Array of tilemaps used for collision
    public var backgroundTiles:FlxGroup;

    public function new(tiledLevel:Dynamic)
    {
        super(tiledLevel);

        backgroundTiles = new FlxGroup();

        FlxG.camera.setBounds(0, 0, fullWidth, fullHeight, true);

        // Load Tile Maps
        for (tileLayer in layers)
        {

            var processedPath = "assets/images/tiles/sheet.png";
            trace(processedPath);

            var tilemap:FlxTilemap = new FlxTilemap();
            tilemap.widthInTiles = width;
            tilemap.heightInTiles = height;
            tilemap.loadMap(tileLayer.tileArray, processedPath, 128, 64, 0, 1, 1, 1);

            backgroundTiles.add(tilemap);

        }
    }

}

и я называю это в PlayState следующим образом;

    // Load the tilemap
    _map = new MapLoader(AssetPaths.map__tmx);

    // Load the tilesets
    add(_map.backgroundTiles);

Ошибка, которую я продолжаю получать:

flixel.addons.editors.tiled.TiledMap has no field backgroundTiles

Однако мне кажется, что я действительно добавляю это поле так, как это делается в демоверсии. Что я делаю не так? Мой уровень опыта в Haxe / Haxeflixel - начальный уровень.

Чтобы быстро просмотреть код, перейдите по https://github.com/rishavs/KingdomFail_Haxe/

Источник демонстрации, на который я ссылаюсь, находится по адресу https://github.com/HaxeFlixel/flixel-demos/tree/master/Editors/TiledEditor/source

2 ответа

Решение

Вместо

private var _map:TiledMap;

попробуйте сделать:

private var _map:MapLoader;

В противном случае компилятор не поймет, что экземпляр действительно имеет свойство, которое вы объявили в подклассе.

В плане дизайна вы можете подумать о том, имеет ли смысл определять MapLoader как подкласс TiledMap, Мне кажется, что для создания FlxGroup ты ищешь.

На самом деле, я использую простой способ, используя меньше дополнительного / внешнего кода, просто экспортируя карту в Json, затем используя собственный анализатор Haxe Json.

var tmxTxt:String = File.getContent("assets/data/level-1.json");
var tmxData = Json.parse(tmxTxt);
trace(tmxData.layers[1].data);

Тогда я могу получить доступ ко всему в TMX.

FlxG.worldBounds.width = tmxData.width * tmxData.tilewidth;
FlxG.worldBounds.height = tmxData.height * tmxData.tileheight;

_collisionMap = new FlxTilemap();
_collisionMap.loadMapFromArray(tmxData.layers[1].data, tmxData.width, tmxData.height, "assets/images/mariou-tileset.png", TILE_WIDTH, TILE_HEIGHT, null, 1);
add(_collisionMap);

Используя этот способ, я независим от аддона Tiledmap, поэтому мне все равно, будет ли добавлено что-то новое в формат tmx, я просто должен изменить свой код.

В текущем примере Tiled, представленном на веб-сайте Haxeflixel, используется очень странный метод, требующий некоторых частных свойств, чтобы получить имя набора плиток... в то время как все в формате tmx и легко читается с помощью Json.

Другие вопросы по тегам