各スプライトのUVがXMLで吐き出されるため
スプライトシートを作ったはいいけど、iOSのOpenGLで使う時など
C/C++ でも使える形式に変換するものがないので Python で簡易スクリプトを書いてみた。
動作確認は Python2.7.2 Windows7 。 バッチ処理は Windows 向けだが
Python スクリプト自体は他の環境でも動くと思われる。
まずは以下の Python スクリプトをコピペして保存。
=====[ convert.py ]=====
# -*- coding: utf-8 -*-
import codecs
import sys, re
sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout)
print u"open file.\n"
inname = sys.argv[1]
trimname= inname.split('\\')[-1].split('.xml')[0]
f = codecs.open (inname, 'r', 'utf-16')
data = f.read ()
print u"file size: " + unicode (len (data)) + u" byte(s).\n"
#print data
f.close ()
print u"replace text.\n"
xlist = re.findall (r'x="([0-9]+)"', data)
ylist = re.findall (r'y="([0-9]+)"', data)
wlist = re.findall (r'width="([0-9]+)"', data)
hlist = re.findall (r'height="([0-9]+)"', data)
nlist = re.findall (r'name="([a-zA-Z0-9_]+)"', data)
out = u"typedef struct{ int x, y, w, h } ssuv;\n\n"
if len (xlist) == len (ylist) and len (xlist) == len (wlist) and len (xlist) == len (hlist) and len (xlist) == len (nlist):
i = 0
out += u"enum {\n"
for x in xlist:
print nlist[i]
out += u"\t%(name)s,\n" % {'name' : nlist[i][:-4] }
i += 1
out += u"};\n\n"
i = 0
out += u"ssuv %(valuename)s_tex[] = {\n" % {'valuename':trimname}
for x in xlist:
out += u"\t{%(X)d, %(Y)d, %(W)d, %(H)d},\n" % { 'X':int (xlist[i]), 'Y':int (ylist[i]), 'W':int (wlist[i]), 'H':int (hlist[i])}
i += 1
out += u"};\n"
print u"output file."
f = open (trimname + "_out.txt", 'w')
f.write (out)
f.close ()
========================あとは引数に xml のファイルパスを渡してやれば
ファイル名_out.txt というファイルで enum とテーブルに変換したものを吐き出す。
適当にバッチ化してやると楽かも。
例えば、Windows ならさらに以下の様なバッチファイルを作成する。
=====[ convert.bat ]=====
echo off
python convert.py %1
pause
=========================
以後、このバッチに処理したい xml をドラッグするだけでコンバートされる。
ちなみに enum で定義される名前は、
シンボル名をそのまま使うのでシンボル名に全角を使わないような工夫が必要です。