0

我正在尝试使用 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

4

2 回答 2

3

代替

private var _map:TiledMap;

尝试做:

private var _map:MapLoader;

否则编译器不会意识到实例实际上具有您在子类中声明的属性。

在设计方面,您可能需要考虑将其定义MapLoaderTiledMap. 在我看来,您只需要一些功能来创建FlxGroup您正在寻找的东西。

于 2015-01-05T14:18:55.890 回答
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 阅读。

于 2017-06-23T08:55:31.730 回答