如何在 Haxeflixel 中加载简单的 tmx 文件?
How to load simple tmx file in Haxeflixel?
我正在尝试使用 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
而不是
private var _map:TiledMap;
尝试做:
private var _map:MapLoader;
否则编译器不会意识到该实例实际上具有您在子类中声明的属性。
在设计方面,您可能需要考虑将 MapLoader
定义为 TiledMap
的子类是否真的有意义。在我看来,您只需要一些功能即可创建您正在寻找的 FlxGroup
。
实际上,我使用了一种简单的方法,使用较少的 add-on/external 代码,只需在 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.
我正在尝试使用 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
而不是
private var _map:TiledMap;
尝试做:
private var _map:MapLoader;
否则编译器不会意识到该实例实际上具有您在子类中声明的属性。
在设计方面,您可能需要考虑将 MapLoader
定义为 TiledMap
的子类是否真的有意义。在我看来,您只需要一些功能即可创建您正在寻找的 FlxGroup
。
实际上,我使用了一种简单的方法,使用较少的 add-on/external 代码,只需在 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.