cocos2d-x create_project.py python3版本

前端之家收集整理的这篇文章主要介绍了cocos2d-x create_project.py python3版本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

之前cocos2d-x都是 python2.7版本,固改成python3.x版本 ,仅仅是个人爱好修改

  1. #!/usr/bin/python
  2. #coding=utf-8
  3. # create_project_v3.py
  4. # Create cross-platform cocos2d-x project
  5. # Copyright (c) 2012 cocos2d-x.org
  6. # Author: WangZhe
  7.  
  8. # define global variables
  9.  
  10. context = {
  11. "language" : "undefined","src_project_name" : "undefined","src_package_name" : "undefined","dst_project_name" : "undeifned","dst_package_name" : "undefined","src_project_path" : "undefined","dst_project_path" : "undefined","script_dir" : "undefined",}
  12. platforms_list = []
  13.  
  14. # begin
  15. import sys
  16. import os,os.path
  17. import json
  18. import shutil
  19.  
  20. def dumpUsage():
  21. print ("Usage: create_project.py -project PROJECT_NAME -package PACKAGE_NAME -language PROGRAMING_LANGUAGE")
  22. print ("Options:")
  23. print (" -project PROJECT_NAME Project name,for example: MyGame")
  24. print (" -package PACKAGE_NAME Package name,for example: com.MyCompany.MyAwesomeGame")
  25. print (" -language PROGRAMING_LANGUAGE Major programing lanauge you want to used,should be [cpp | lua | javascript]")
  26. print ("")
  27. print ("Sample 1: ./create_project.py -project MyGame -package com.MyCompany.AwesomeGame")
  28. print ("Sample 2: ./create_project.py -project MyGame -package com.MyCompany.AwesomeGame -language javascript")
  29. print ("")
  30.  
  31. def checkParams(context):
  32. # generate our internal params
  33. context["script_dir"] = os.getcwd() + "/"
  34. global platforms_list
  35. # invalid invoke,tell users how to input params
  36. if len(sys.argv) < 7:
  37. dumpUsage()
  38. sys.exit()
  39. # find our params
  40. for i in range(1,len(sys.argv)):
  41. if "-project" == sys.argv[i]:
  42. # read the next param as project_name
  43. context["dst_project_name"] = sys.argv[i+1]
  44. context["dst_project_path"] = os.getcwd() + "/../../projects/" + context["dst_project_name"]
  45. elif "-package" == sys.argv[i]:
  46. # read the next param as g_PackageName
  47. context["dst_package_name"] = sys.argv[i+1]
  48. elif "-language" == sys.argv[i]:
  49. # choose a scripting language
  50. context["language"] = sys.argv[i+1]
  51. # pinrt error log our required paramters are not ready
  52. raise_error = False
  53. if context["dst_project_name"] == "undefined":
  54. print ("Invalid -project parameter")
  55. raise_error = True
  56. if context["dst_package_name"] == "undefined":
  57. print ("Invalid -package parameter")
  58. raise_error = True
  59. if context["language"] == "undefined":
  60. print ("Invalid -language parameter")
  61. raise_error = True
  62. if raise_error != False:
  63. sys.exit()
  64. # fill in src_project_name and src_package_name according to "language"
  65. if ("cpp" == context["language"]):
  66. context["src_project_name"] = "HelloCpp"
  67. context["src_package_name"] = "org.cocos2dx.hellocpp"
  68. context["src_project_path"] = os.getcwd() + "/../../template/multi-platform-cpp"
  69. platforms_list = ["ios","android","win32","winrt","wp8","mac","blackberry","linux","marmalade","tizen","wp8-xaml"]
  70. elif ("lua" == context["language"]):
  71. context["src_project_name"] = "HelloLua"
  72. context["src_package_name"] = "org.cocos2dx.hellolua"
  73. context["src_project_path"] = os.getcwd() + "/../../template/multi-platform-lua"
  74. platforms_list = ["ios","marmalade"]
  75. elif ("javascript" == context["language"]):
  76. context["src_project_name"] = "HelloJavascript"
  77. context["src_package_name"] = "org.cocos2dx.hellojavascript"
  78. context["src_project_path"] = os.getcwd() + "/../../template/multi-platform-js"
  79. platforms_list = ["ios","win32"]
  80. # end of checkParams(context) function
  81.  
  82. def replaceString(filepath,src_string,dst_string):
  83. content = ""
  84. f1 = open(filepath,"rb")
  85. for line in f1:
  86. temp_content = line.decode('utf-8')
  87. if src_string in temp_content:
  88. content += temp_content.replace(src_string,dst_string)
  89. else:
  90. content += temp_content
  91. f1.close()
  92. f2 = open(filepath,"wb")
  93. f2.write(content.encode(encoding='utf_8',errors='strict'))
  94. f2.close()
  95. # end of replaceString
  96.  
  97. def replaceLastNameInPath(raw_path):
  98. cnt = raw_path.count("PROJECT_NAME")
  99. if (cnt > 0):
  100. raw_path = raw_path.replace("PROJECT_NAME",context["src_project_name"],cnt - 1)
  101. dst = raw_path.replace("PROJECT_NAME",context["dst_project_name"])
  102. return dst
  103. return ""
  104. # end of replaceLastNameInPath
  105.  
  106. def processPlatformProjects(platform):
  107. # determine proj_path
  108. proj_path = context["dst_project_path"] + "/proj.%s/" % platform
  109. java_package_path = ""
  110.  
  111. # read josn config file or the current platform
  112. f = open("%s.json" % platform)
  113. data = json.load(f)
  114.  
  115. # rename package path,like "org.cocos2dx.hello" to "com.company.game". This is a special process for android
  116. if (platform == "android"):
  117. src_pkg = context["src_package_name"].split('.')
  118. dst_pkg = context["dst_package_name"].split('.')
  119. os.rename(proj_path + "src/" + src_pkg[0],proj_path + "src/" + dst_pkg[0])
  120. os.rename(proj_path + "src/" + dst_pkg[0] + "/" + src_pkg[1],proj_path + "src/" + dst_pkg[0] + "/" + dst_pkg[1])
  121. os.rename(proj_path + "src/" + dst_pkg[0] + "/" + dst_pkg[1] + "/" + src_pkg[2],proj_path + "src/" + dst_pkg[0] + "/" + dst_pkg[1] + "/" + dst_pkg[2])
  122. java_package_path = dst_pkg[0] + "/" + dst_pkg[1] + "/" + dst_pkg[2]
  123.  
  124. # rename files and folders
  125. for i in range(0,len(data["rename"])):
  126. tmp = data["rename"][i].replace("PACKAGE_PATH",java_package_path)
  127. src = tmp.replace("PROJECT_NAME",context["src_project_name"])
  128. if (platform == "wp8-xaml"):
  129. dst = replaceLastNameInPath(tmp)
  130. else:
  131. dst = tmp.replace("PROJECT_NAME",context["dst_project_name"])
  132. if (os.path.exists(proj_path + src) == True):
  133. os.rename(proj_path + src,proj_path + dst)
  134.  
  135. # remove useless files and folders
  136. for i in range(0,len(data["remove"])):
  137. dst = data["remove"][i].replace("PROJECT_NAME",context["dst_project_name"])
  138. if (os.path.exists(proj_path + dst) == True):
  139. shutil.rmtree(proj_path + dst)
  140. # rename package_name. This should be replaced at first. Don't change this sequence
  141. for i in range(0,len(data["replace_package_name"])):
  142. tmp = data["replace_package_name"][i].replace("PACKAGE_PATH",java_package_path)
  143. dst = tmp.replace("PROJECT_NAME",context["dst_project_name"])
  144. if (os.path.exists(proj_path + dst) == True):
  145. replaceString(proj_path + dst,context["src_package_name"],context["dst_package_name"])
  146. # rename project_name
  147. for i in range(0,len(data["replace_project_name"])):
  148. tmp = data["replace_project_name"][i].replace("PACKAGE_PATH",context["dst_project_name"])
  149. # done!
  150. print ("proj.%s\t\t: Done!" % platform)
  151. # end of processPlatformProjects
  152.  
  153.  
  154.  
  155. # -------------- main --------------
  156. # dump argvs
  157. # print sys.argv
  158.  
  159. # prepare valid "context" dictionary
  160. checkParams(context)
  161. # import pprint
  162. # pprint.pprint(context)
  163.  
  164. # copy "lauguage"(cpp/lua/javascript) platform.proj into cocos2d-x/projects/<project_name>/folder
  165. if (os.path.exists(context["dst_project_path"]) == True):
  166. print ("Error:" + context["dst_project_path"] + " folder is already existing")
  167. print ("Please remove the old project or choose a new PROJECT_NAME in -project parameter")
  168. sys.exit()
  169. else:
  170. shutil.copytree(context["src_project_path"],context["dst_project_path"],True)
  171.  
  172. # call process_proj from each platform's script folder
  173. for platform in platforms_list:
  174. processPlatformProjects(platform)
  175. # exec "import %s.handle_project_files" % (platform)
  176. # exec "%s.handle_project_files.handle_project_files(context)" % (platform)
  177.  
  178. print ("New project has been created in this path: " + context["dst_project_path"].replace("/tools/project-creator/../..",""))
  179. print ("Have Fun!")

猜你在找的Cocos2d-x相关文章