前のエントリーで紹介したマップエディタ、「Tiled Map Editor」ですが実際に使ってみると保存可能なファイル形式は以下の3つの形式しか有りませんでした。
いずれもちょっと使い勝手が悪いのでC言語やJavaScriptで使いやすい様に配列に変換するPythonのプログラムを作りました。
#! /usr/bin/env python # -*- coding: utf-8 -*- from xml.etree.ElementTree import ElementTree import xml.dom.minidom import zlib import sys from struct import * argvs = sys.argv argc = len(argvs) if (argc != 2): print 'Usage: python %s filename' % argvs[0] quit() e = ElementTree(file=open(argvs[1])) rt = e.getroot() width = int(rt.get('width')) height = int(rt.get('height')) allDatas = e.findall("//data") out = '' for allData in allDatas: allData = allData.text.decode("base64").decode("zlib") oneMap = ''; for y in xrange(height): line = '' for x in xrange(width): idx = (y*width + x) * 4 if line != '': line += ', ' line += str(unpack('<L', allData[idx:idx+4])[0]) oneMap += ' ['+line+'],\n' if out != '': out += ',\n' out += ' [\n'+oneMap[0:-2]+'\n ]' out = '[\n'+out+'\n];' print out
このプログラムは設定のここの部分がこの様な設定に成っている(デフォルトのまま)前提に成っています。それ以外に設定されていると正しく動作しません。
使い方はこのプログラムを convert.py というファイル名で保存した場合。コマンドラインで以下の様に入力して下さい。
python convert.py 変換したい.tmxファイル
プログラム作成時に参考にしたサイト
XML を簡単に読み込みたいんだけど - ElementTree を使ってみた - mitszoの日記
http://d.hatena.ne.jp/mitszo/20070529/1180434669
ElementTreeモジュールの使い方 - 図書館断想
http://d.hatena.ne.jp/katz3/20080229/1204314909