強火で進め

このブログではプログラム関連の記事を中心に書いてます。

「Tiled Map Editor」の.tmxファイルを配列に変換

前のエントリーで紹介したマップエディタ、「Tiled Map Editor」ですが実際に使ってみると保存可能なファイル形式は以下の3つの形式しか有りませんでした。

  • 独自形式のもの
  • T-Engine4 map(Lua環境向け)
  • TMW-eAthena collision(名前からすると当たり判定データ形式?)

いずれもちょっと使い勝手が悪いので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