Как загрузить простой файл 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.