2015-01-05 9 views
0

flixel-addons 라이브러리를 사용하여 내 haxeflixel 앱에서 간단한 tmx 맵을 사용하려고합니다.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; 

그렇지 않으면 컴파일러는 인스턴스에 실제로 하위 클래스에서 선언 한 속성이 있음을 인식하지 못합니다.

MapLoaderTiledMap의 하위 클래스로 정의하는 것이 실제로 중요한지 생각해보십시오. 당신이 찾고있는 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 샘플은 아주 이상한 방법을 사용하여 타일셋 이름을 얻기 위해 일부 개인 속성이 필요합니다 ... 모든 것이 tmx 형식이고 Json으로 읽기 쉽습니다.