模板RED转JSON.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import json
  2. import math
  3. import xml.etree.ElementTree as ET
  4. import re
  5. import os
  6. import plistlib
  7. # 转换盘子显示名称到sprite名称
  8. # ‘plate_wh_03_8_三角圆弧’ 转换成sprite名称 plate_wh_03_8.png
  9. def tranformDName2SName(displayName):
  10. startpos = 0
  11. for i in [1,2,3,4]:
  12. startpos = displayName.index('_', startpos) + 1
  13. if startpos == -1:
  14. break
  15. if startpos == -1:
  16. return displayName
  17. else:
  18. return displayName[0:startpos-1]+".png"
  19. # 盘子情况(孔位)转JSON
  20. def readOnePlateWithHoles( name ):
  21. redfilename = "../ccb/盘子上位置情况/" + name
  22. plate_obj = {} # position always 0,0 in center and no size property!
  23. with open(redfilename,'rb') as fileobject:
  24. plist_root = plistlib.load(fileobject,fmt=plistlib.FMT_XML)
  25. children = plist_root['nodeGraph']['children']
  26. ichild = 0
  27. plate_obj["holes"] = []
  28. for child in children:
  29. ichild = ichild + 1
  30. if ichild==1:
  31. name1 = child["displayName"]
  32. # 把显示名称 ‘plate_wh_03_8_三角圆弧’ 转换成sprite名称 plate_wh_03_8.png
  33. name2 = tranformDName2SName(name1)
  34. plate_obj["name"] = name2
  35. else:
  36. hole1 = {}
  37. hole1["x"] = child["properties"][0]["value"][0]
  38. hole1["y"] = child["properties"][0]["value"][1]
  39. plate_obj["holes"].append(hole1)
  40. return plate_obj
  41. # 模板转JSON
  42. def readTemplate( name ):
  43. redfilename = "../关卡/关卡模板/" + name
  44. template_obj = {} # 长宽永远为640x720 左下角为坐标原点 盘子坐标都是盘子的中心坐标
  45. template_obj["name"] = name
  46. template_obj["plates"] = []
  47. with open(redfilename, 'rb') as fileobject:
  48. plist_root = plistlib.load(fileobject, fmt=plistlib.FMT_XML)
  49. children = plist_root['nodeGraph']['children'][0]["children"]
  50. for child in children:
  51. name1 = child["displayName"]+".red"
  52. plate_obj = readOnePlateWithHoles( name1 )
  53. plate_obj["x"] = child["properties"][0]["value"][0]
  54. plate_obj["y"] = child["properties"][0]["value"][1]
  55. template_obj["plates"].append(plate_obj)
  56. return template_obj
  57. # 写入JSON文件
  58. def writeJsonFile( obj, jsonbasename ):
  59. fullname = "../config/模板JSON/" + jsonbasename
  60. with open(fullname,'w') as fileobject:
  61. fileobject.write(json.dumps(obj,ensure_ascii=False))
  62. ## 程序入口 --------------------------------------
  63. #读取 关卡/关卡模板/ 下面全部red文件,转换成json写入模板json文件夹。
  64. for (root,dirs,files) in os.walk('../关卡/关卡模板',topdown=True):
  65. for fname in files:
  66. if( "模板" in fname and ".red" in fname ):
  67. template_name = fname
  68. out_name = template_name.replace(".red","_PnH.json")
  69. print("read ", template_name)
  70. template_obj = readTemplate(template_name)
  71. print("write ", out_name)
  72. writeJsonFile(template_obj, out_name)
  73. print("done")