2015-01-05 11 views
0

我试图使用flixel,插件库使用一个简单的TMX地图在我haxeflixel应用程序。如何在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

回答

3

而不是

private var _map:TiledMap; 

尝试做演示来源:

private var _map:MapLoader; 

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

在设计方面,您可能需要考虑将MapLoader定义为TiledMap的子类是否真的有意义。在我看来,你只需要一些功能来创建FlxGroup你正在寻找。

+0

谢谢。回想起来,这似乎是一件让我难堪的愚蠢东西。 重新设计,我不喜欢演示中的TiledMap类,因为我觉得它太严格了。我必须具有特定的地图属性,特定的路径等,我想添加到它,并使其自定义为我自己的制作地图的方式。所以当我学习更好地使用Haxeflixel时,我会为这堂课添加越来越多的东西。 –

+0

刚刚意识到你是* bjorn。感谢您创建Tiled。 :) –

+0

哈哈,是的,这是我。别客气! :) –

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读取。