import json import math import xml.etree.ElementTree as ET import re import os import plistlib # 转换盘子显示名称到sprite名称 # ‘plate_wh_03_8_三角圆弧’ 转换成sprite名称 plate_wh_03_8.png def tranformDName2SName(displayName): startpos = 0 for i in [1,2,3,4]: startpos = displayName.index('_', startpos) + 1 if startpos == -1: break if startpos == -1: return displayName else: return displayName[0:startpos-1]+".png" # 盘子情况(孔位)转JSON def readOnePlateWithHoles( name ): redfilename = "../ccb/盘子上位置情况/" + name plate_obj = {} # position always 0,0 in center and no size property! with open(redfilename,'rb') as fileobject: plist_root = plistlib.load(fileobject,fmt=plistlib.FMT_XML) children = plist_root['nodeGraph']['children'] ichild = 0 plate_obj["holes"] = [] for child in children: ichild = ichild + 1 if ichild==1: name1 = child["displayName"] # 把显示名称 ‘plate_wh_03_8_三角圆弧’ 转换成sprite名称 plate_wh_03_8.png name2 = tranformDName2SName(name1) plate_obj["name"] = name2 else: hole1 = {} hole1["x"] = child["properties"][0]["value"][0] hole1["y"] = child["properties"][0]["value"][1] plate_obj["holes"].append(hole1) return plate_obj # 模板转JSON def readTemplate( name ): redfilename = "../关卡/关卡模板/" + name template_obj = {} # 长宽永远为640x720 左下角为坐标原点 盘子坐标都是盘子的中心坐标 template_obj["name"] = name template_obj["plates"] = [] with open(redfilename, 'rb') as fileobject: plist_root = plistlib.load(fileobject, fmt=plistlib.FMT_XML) children = plist_root['nodeGraph']['children'][0]["children"] for child in children: name1 = child["displayName"]+".red" plate_obj = readOnePlateWithHoles( name1 ) plate_obj["x"] = child["properties"][0]["value"][0] plate_obj["y"] = child["properties"][0]["value"][1] template_obj["plates"].append(plate_obj) return template_obj # 写入JSON文件 def writeJsonFile( obj, jsonbasename ): fullname = "../config/模板JSON/" + jsonbasename with open(fullname,'w') as fileobject: fileobject.write(json.dumps(obj,ensure_ascii=False)) ## 程序入口 -------------------------------------- #读取 关卡/关卡模板/ 下面全部red文件,转换成json写入模板json文件夹。 for (root,dirs,files) in os.walk('../关卡/关卡模板',topdown=True): for fname in files: if( "模板" in fname and ".red" in fname ): template_name = fname out_name = template_name.replace(".red","_PnH.json") print("read ", template_name) template_obj = readTemplate(template_name) print("write ", out_name) writeJsonFile(template_obj, out_name) print("done")