我正在尝试使用flixel-addons库在我的haxeflixel应用程序中使用一个简单的tmx地图。
我的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
答案 0 :(得分:3)
而不是
private var _map:TiledMap;
尝试做:
private var _map:MapLoader;
否则编译器将不会意识到实例实际上具有您在子类中声明的属性。
设计方面你可能想要考虑将MapLoader
定义为TiledMap
的子类是否真的有意义。在我看来,你只需要一些功能来创建你正在寻找的FlxGroup
。
答案 1 :(得分:0)
实际上,我使用一种简单的方法,使用较少的附加/外部代码,只需在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格式中添加了新内容,我只需要更改我的代码。
在Haxeflixel网站上提供的当前Tiled示例使用了一种非常奇怪的方法,需要一些私有属性来获取tileset名称...而所有内容都是tmx格式并且易于使用Json读取。