ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Windows平台下cocos2d-x设置自定义项目路径的方法

2020-02-20 09:41:32  阅读:238  来源: 互联网

标签:src context 自定义 Windows dst project cocos2d path name


2015-11-15 03:07:59
重要提示:更换VS开发版本请删除并重新解压cocos2d-x文件,清除编译中残留下的文件
测试平台:Win10 x64 , python 2.7.10 , cocos2d-x 2.2.6 , Visual Studio 2010
测试路径
项目路径:D:\Workspace\projects
程序路径:D:\LAMP\cocos2d-x-2.2.6
实施步骤
1. 通过高级系统设置建立系统环境变量(用户环境变量也可以)
COCOS2D_HOME = D:\LAMP\cocos2d-x-2.2.6
2. %COCOS2D_HOME%\tools\project-creator 下建立create_project_win.py 文件
3. D:\Workspace\projects 路径下创建文件 create_project.bat
4. 双击bat文件即可在项目路径下创建项目文件夹
注意:
请按照源码中的格式修改文件源码中的路径
此方法中已经将替换 sln 、vcxproj 文件中的环境变量代码加入 python 源码中
经测试,项目文件可以正常编译运行

create_project_win.py 源码

#!/usr/bin/python
# create_project.py
# Create cross-platform cocos2d-x project
# Copyright (c) 2012 cocos2d-x.org
# Author: WangZhe

# define global variables
context = {
"language"          : "undefined",
"src_project_name"  : "undefined",
"src_package_name"  : "undefined", 
"dst_project_name"  : "undefined",
"dst_package_name"  : "undefined",
"src_project_path"  : "undefined",
"dst_project_path"  : "undefined",
"script_dir"        : "undefined",
}
platforms_list = []

# begin
import sys
import os, os.path
import json
import shutil

def dumpUsage():
    print "Usage: create_project.py -project PROJECT_NAME -package PACKAGE_NAME -language PROGRAMING_LANGUAGE"
    print "Options:"
    print "  -project   PROJECT_NAME          Project name, for example: MyGame"
    print "  -package   PACKAGE_NAME          Package name, for example: com.MyCompany.MyAwesomeGame"
    print "  -language  PROGRAMING_LANGUAGE   Major programing lanauge you want to used, should be [cpp | lua | javascript]"
    print ""
    print "Sample 1: ./create_project.py -project MyGame -package com.MyCompany.AwesomeGame"
    print "Sample 2: ./create_project.py -project MyGame -package com.MyCompany.AwesomeGame -language javascript"
    print ""

def checkParams(context):
    # generate our internal params
    context["script_dir"] = os.getcwd() + "/"
    global platforms_list
    
    # invalid invoke, tell users how to input params
    if len(sys.argv) < 7:
        dumpUsage()
        sys.exit()
    
    # find our params
    for i in range(1, len(sys.argv)):
        if "-project" == sys.argv[i]:
            # read the next param as project_name
            context["dst_project_name"] = sys.argv[i+1]
            context["dst_project_path"] =  "D:\\Workspace\\projects\\" + context["dst_project_name"]
        elif "-package" == sys.argv[i]:
            # read the next param as g_PackageName
            context["dst_package_name"] = sys.argv[i+1]
        elif "-language" == sys.argv[i]:
            # choose a scripting language
            context["language"] = sys.argv[i+1]
    
    # pinrt error log our required paramters are not ready
    raise_error = False
    if context["dst_project_name"] == "undefined":
        print "Invalid -project parameter"
        raise_error = True
    if context["dst_package_name"] == "undefined":
        print "Invalid -package parameter"
        raise_error = True
    if context["language"] == "undefined":
        print "Invalid -language parameter"
        raise_error = True
    if raise_error != False:
        sys.exit()
                                 
    # fill in src_project_name and src_package_name according to "language"
    if ("cpp" == context["language"]):
        context["src_project_name"] = "HelloCpp"
        context["src_package_name"] = "org.cocos2dx.hellocpp"
        context["src_project_path"] = "D:\\LAMP\\cocos2d-x-2.2.6\\template\\multi-platform-cpp"
        platforms_list = ["ios",
                          "android",
                          "win32",
                          "winrt",
                          "wp8",
                          "mac",
                          "blackberry",
                          "linux",
                          "marmalade",
                          "tizen",
                          "wp8-xaml"]
    elif ("lua" == context["language"]):
        context["src_project_name"] = "HelloLua"
        context["src_package_name"] = "org.cocos2dx.hellolua"
        context["src_project_path"] = "D:\\LAMP\\cocos2d-x-2.2.6\\template\\multi-platform-lua"
        platforms_list = ["ios",
                          "android",
                          "win32",
                          "blackberry",
                          "linux",
                          "marmalade"]
    elif ("javascript" == context["language"]):
        context["src_project_name"] = "HelloJavascript"
        context["src_package_name"] = "org.cocos2dx.hellojavascript"
        context["src_project_path"] = "D:\\LAMP\\cocos2d-x-2.2.6\\template\\multi-platform-js"
        platforms_list = ["ios",
                          "android",
                          "win32"]
# end of checkParams(context) function

def replaceString(filepath, src_string, dst_string):
    content = ""
    f1 = open(filepath, "rb")
    for line in f1:
        if src_string in line:
            content += line.replace(src_string, dst_string)
        else:
            content += line
    f1.close()
    f2 = open(filepath, "wb")
    f2.write(content)
    f2.close()
# end of replaceString

def replaceLastNameInPath(raw_path):
    cnt = raw_path.count("PROJECT_NAME")
    if (cnt > 0):
        raw_path = raw_path.replace("PROJECT_NAME", context["src_project_name"], cnt - 1)
        dst = raw_path.replace("PROJECT_NAME", context["dst_project_name"])
        return dst
    return ""
# end of replaceLastNameInPath

def processPlatformProjects(platform):
    # determine proj_path
    proj_path = context["dst_project_path"] + "/proj.%s/" % platform
    java_package_path = ""

    # read josn config file or the current platform
    f = open("%s.json" % platform)
    data = json.load(f)

    # rename package path, like "org.cocos2dx.hello" to "com.company.game". This is a special process for android
    if (platform == "android"):
        src_pkg = context["src_package_name"].split('.')
        dst_pkg = context["dst_package_name"].split('.')
        os.rename(proj_path + "src/" + src_pkg[0],
                  proj_path + "src/" + dst_pkg[0])
        os.rename(proj_path + "src/" + dst_pkg[0] + "/" + src_pkg[1],
                  proj_path + "src/" + dst_pkg[0] + "/" + dst_pkg[1])
        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])
        java_package_path = dst_pkg[0] + "/" + dst_pkg[1] + "/" + dst_pkg[2]

    # rename files and folders
    for i in range(0, len(data["rename"])):
        tmp = data["rename"][i].replace("PACKAGE_PATH", java_package_path)
        src = tmp.replace("PROJECT_NAME", context["src_project_name"])
        if (platform == "wp8-xaml"):
            dst = replaceLastNameInPath(tmp)
        else:
            dst = tmp.replace("PROJECT_NAME", context["dst_project_name"])
        if (os.path.exists(proj_path + src) == True):
            os.rename(proj_path + src, proj_path + dst)

    # remove useless files and folders
    for i in range(0, len(data["remove"])):
        dst = data["remove"][i].replace("PROJECT_NAME", context["dst_project_name"])
        if (os.path.exists(proj_path + dst) == True):
            shutil.rmtree(proj_path + dst)
    
    # rename package_name. This should be replaced at first. Don't change this sequence
    for i in range(0, len(data["replace_package_name"])):
        tmp = data["replace_package_name"][i].replace("PACKAGE_PATH", java_package_path)
        dst = tmp.replace("PROJECT_NAME", context["dst_project_name"])
        if (os.path.exists(proj_path + dst) == True):
            replaceString(proj_path + dst, context["src_package_name"], context["dst_package_name"])
    
    # rename project_name
    for i in range(0, len(data["replace_project_name"])):
        tmp = data["replace_project_name"][i].replace("PACKAGE_PATH", java_package_path)
        dst = tmp.replace("PROJECT_NAME", context["dst_project_name"])
        if (os.path.exists(proj_path + dst) == True):
            replaceString(proj_path + dst, context["src_project_name"], context["dst_project_name"])
                  
    # done!
    print "proj.%s\t\t: Done!" % platform
# end of processPlatformProjects

#Codes bellow were written by Jackie in 2015-11-15
def fixforwin32(path):
    filelist = os.listdir(path)
    for item in filelist:
        suffix = item.split('.')[1]
        if "sln" == suffix:
            content = open(path + item , 'r').read().replace("..\\..\\..\\" , "%COCOS2D_HOME%\\")
            file = open(path + item , 'w')
            file.write(content)
            file.close()
        elif "vcxproj" == suffix:
            content = open(path + item , 'r').read().replace("$(ProjectDir)..\\..\\..\\" , "$(COCOS2D_HOME)\\")
            file = open(path + item , 'w')
            file.write(content)
            file.close()
    print "Fix for win32 done !"        
#end of fixforwin32



# -------------- main --------------
# dump argvs
# print sys.argv

# prepare valid "context" dictionary
checkParams(context)
# import pprint
# pprint.pprint(context)

# copy "lauguage"(cpp/lua/javascript) platform.proj into cocos2d-x/projects/<project_name>/folder
if (os.path.exists(context["dst_project_path"]) == True):
    print "Error:" + context["dst_project_path"] + " folder is already existing"
    print "Please remove the old project or choose a new PROJECT_NAME in -project parameter"
    sys.exit()
else:
    shutil.copytree(context["src_project_path"], context["dst_project_path"], True)
    print os.getcwd()
# call process_proj from each platform's script folder          
for platform in platforms_list:
    processPlatformProjects(platform)
#    exec "import %s.handle_project_files" % (platform)
#    exec "%s.handle_project_files.handle_project_files(context)" % (platform)
targetpath = context["dst_project_path"] + "\\proj.win32\\"
fixforwin32(targetpath)
print "New project has been created in this path: " + context["dst_project_path"]
print "Have Fun!"

create_project.bat 源码

@echo off
title Create_Project_Win
:start
cls
color 0A
echo. This tool will help you create a cocos2d project ^. ^
echo. -----------------------------------------------------
SET /P pjn= Input your project name:
if /i "%pjn%" == "" goto error
SET /P pkn= Input your package name:
if /i "%pkn%" == "" goto error
SET /P lge= Input code language:
if /i "%lge%" == "" goto error
cd /d %COCOS2D_HOME%\tools\project-creator
python create_project_win.py -project %pjn% -package %pkn% -language %lge%
pause
exit
:error
cls
color CF
echo. @@@@@@@@@@@@@@@@@@@@@@@
echo. @                                                                         @
echo. @       Error.Any parameters can't be NULL!       @
echo. @                                                                         @
echo. @@@@@@@@@@@@@@@@@@@@@@@
pause
SET pjn=
SET pkn=
SET lge=
goto start
JackM0x 发布了3 篇原创文章 · 获赞 0 · 访问量 31 私信 关注

标签:src,context,自定义,Windows,dst,project,cocos2d,path,name
来源: https://blog.csdn.net/jk92103/article/details/104404985

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有