이 글은 Tiled map editor를 이용해서 만든 맵 데이터를 FlashPunk로 불러오는 법에 대한 글입니다.
Tiled는 맵 저장을 XML로 저장할 수도 있고, zlib로 압축해서 Base64인코딩 할 수도 있습니다.
맵이 커질수록 데이터가 커지기 때문에 압축해서 인코딩하는 방법이 더 좋은데요.
FlashPunk의 map Entity에서 바로 불러오도록 만들어 봤습니다.
Tiled는 맵 저장을 XML로 저장할 수도 있고, zlib로 압축해서 Base64인코딩 할 수도 있습니다.
맵이 커질수록 데이터가 커지기 때문에 압축해서 인코딩하는 방법이 더 좋은데요.
FlashPunk의 map Entity에서 바로 불러오도록 만들어 봤습니다.
맵데이터를 임베딩 한 후, map Entity객체의 생성자 매개변수로 넘겨서 loadXML함수에 넘겨줍니다.
[Embed(source = "../assets/desert_640x480,32x32.tmx")] public static const MAP_DESERT:Class;
(Maps.as파일로 임베딩할 자원만 모아 놓았습니다. 사용할때는 Maps.MAP_DESERT 이렇게 불러오고요)
private function loadXML(xml:Class):void
{
// 불러온 데이터 디코딩, 압축해제
var rawString:String = XML(new xml).child("layer").child("data");
var bytes:ByteArray = ByteArray(Base64.decode(rawString));
bytes.uncompress();
// 맵에 타일 셋팅
for (var i:int = 0; i < bytes.bytesAvailable; i++)
{
var index:int = bytes.readInt();
_map.setTile(i % 10, Math.floor(i / 10), index-1); // 10은 320/32=10
}
}
World Entity객체에 맵 엔티티를 add()해주기만 하면 됩니다.
그리고 Base64 인코더,디코더가 플렉스 프로젝트에선 쓸 수 있지만 액션스크립트 프로젝트에선 쓸 수 없는것 같습니다. 그래서 따로 Base64.as파일을 준비해야 합니다.
여기서 Base64에 대한 자세한 설명과 함께 Base64.as파일도 받을 수 있습니다.