自定義路徑建立Cocos2d-x項目

自定義路徑建立Cocos2d-x項目javascript

本文介紹windows下面如何優雅的建立Cocos2d-x項目。爲什麼稱之爲優雅,是由於如今網上流傳的一些建立方法有一些問題。大體內容以下:html

l  使用VS嚮導建立Cocos2d-x項目(廢棄,不建議使用)java

l  使用create_project.pypython

n  問題1:工程名等替換不徹底android

n  問題2:建立項目不能指定路徑git

使用VS嚮導建立Cocos2d-x項目(廢棄,不建議使用)

Cocos2d-x 2.1.3及以前官方使用「install-template-msvc.bat」文件,安裝VS建立Cocos2d-x項目嚮導,而後能夠按照嚮導建立Cocos2d-x項目。注意默認狀況下,新建項目的存放的位置應該設置在Cocos2d-x引擎的安裝目錄下面,不然可能由於找不到庫文件而不能經過編譯。不過能夠在設置項目屬性,頭文件和庫文件的搜索路徑來解決。能夠參考我以前的一篇博文《C++靜態庫與動態庫》,裏面介紹如何設置vs項目屬性使用靜態庫和動態庫。github

Cocos2d-x 2.1.4,官方建議使用「create_project.py」來建立Cocos2d-x項目,並將在版本廢棄了「install-template-msvc.bat」windows

We recommend you use multi-platform creating tools named create_project.py, which lies in tools/project-creator, to create a new project. This tool can create a project has the same folder structure as HelloCpp. Other tools such as create-android-project.sh will be removed in future.this

Note: VS template was deprecated in this release, please use 'tools/project-creator' instead.lua

——來自官網:http://goo.gl/yVAjMr

我入手Cocos2d-x的時候,剛發佈Cocos2d-x 2.1.4,就被這個坑了。Cocos2d-x 2.1.4廢棄了「install-template-msvc.bat」,可是下載壓縮包裏面又有,可惡的是不能用的,各類報錯。同時網上流傳的就是使用這種方法,讓我繞了很多路。

使用create_project.py

create_project.pycocos2d-x/tools/project-creator/目錄下)使用方法比較簡單:

Usage: create_project.py -project PROJECT_NAME -package PACKAGE_NAME -language PROGRAMING_LANGUAGE

Options:

 -project   PROJECT_NAMEProject name, for example: MyGame

 -package   PACKAGE_NAMEPackage name, for example: com.MyCompany.MyAwesomeGame

 -language  PROGRAMING_LANGUAGEMajor programing lanauge you want to used, should be [cpp | lua | javascript]

Sample 1: ./create_project.py -project MyGame -package com.MyCompany.AwesomeGame

Sample 2: ./create_project.py -project MyGame -package com.MyCompany.AwesomeGame –language javascript

注意:

l  官方建議python使用2.7.3

l  安裝python以後須要設置環境變量,或者使用該腳本時指定python路徑,如C:\python27\python.exe create_project.py …

使用該方法建立項目以後,項目位於cocos2d-x/projects目錄下面。windows平臺進入proj.win32,打開工程文件便可。

使用create_project.py建立項目的原理,即簡單地將cocos2d-x\template目錄下的三種語言模板multi-platform-cppmulti-platform-luamulti-platform-js複製到對應的新建工程目錄下,而後用PROJECT_NAMEPACKAGE_NAME替換模板中的HelloCpp/ HelloLua/ HelloJavascript

問題1:工程名等替換不徹底

下面是我用towergame作爲工程名建立的lua項目,目錄以下:

clip_image001[4]

雖然能夠正常編譯,但發現工程名未替換爲towergame,這比較坑爹。一位日本開發者lettas已經有人提交了修復請求https://github.com/cocos2d/cocos2d-x/pull/3943,不過正式發佈的版本中尚未修改。急着用能夠去github checkout下來用。

問題2:建立項目不能指定路徑

使用create_project.py不能自定義路徑,必須放在cocos2d-x/projects目錄下面,這個設定我認爲很是不合理!這樣將本身的項目放到cocos2d-x引擎目錄中,不方便管理,即庫與項目耦合到一塊兒了,若是cocos2d-x升級也不方便。

比較合理的方案是:

l  cocos2d-x獨立安裝,這樣對cocos2d-x升級也相對簡單。

l  新建cocos2d-x項目獨立於cocos2d-x安裝路徑。經過設置搜索或引用路徑,讓項目可以找到cocos2d-x安裝路徑。

幸運的是,徹底能夠作到這樣。熟悉VS的同窗應該知道,VS工程設置是支持環境變量的。經過下面的一些改造,可讓新建的cocos2d-x項目獨立於cocos2d-x引擎目錄:

1)     將經過create_project.py建立的項目剪切到你但願放置的目錄;

2)     建立環境變量COCOS2DX_HOME,指向cocos2d-x安裝目錄;

3)     *.sln文件使用文本方式打開,將裏面的全部相對路徑「..\..\..」都替換爲環境變量%COCOS2DX_HOME%,如「..\..\..\cocos2dx\proj.win32\cocos2d.vcxproj」替換爲「%COCOS2DX_HOME%\cocos2dx\proj.win32\cocos2d.vcxproj」

4)     *.vcxproj文件使用文本方式打開,將裏面debugrelease 2種模式下<AdditionalIncludeDirectories>節點定義的引用路徑中包含」$(ProjectDir)..\..\..\」都替換爲環境變量「$(COCOS2DX_HOME)\」;注意這裏使用環境變量的方式與*.sln中不同,是$(COCOS2DX_HOME)而非 %COCOS2DX_HOME%

至此,大工告成!看下面的運行起來的vs工程:

clip_image003[4]

圖中依賴的工程跟將新建的項目放在cocos2d-x/projects目錄下面同樣能夠連接到。

上面的替換工做能夠用文本的查找替換功能,能夠輕鬆搞定。可是爲了可以與 create_project.py 集成,我提供下面一段代碼可以自動替換 .sln .vcxproj 文件中對於內容:

 #!/usr/bin/python   

# -*- encoding:utf-8 -*-   

import sys, os

def checkOption():
    argLen = len(sys.argv)
    targetPath =  " ./ "
     if argLen == 2:
        targetPath = sys.argv[1]
         if  not targetPath.endswith( " / "):
            targetPath +=  " / "
     return targetPath
    
def replaceCocos2dxPath(path):
    filelists = os.listdir(path)
     for item  in filelists:
        suffix = (os.path.splitext(item))[1]
         print(suffix)
         if suffix ==  " .sln ":
             print( ' replace "..\..\..\" with %COCOS2DX_HOME% in *.sln ')
             # replace "..\..\..\" with %COCOS2DX_HOME% in *.sln 
            content = open(path + item,  ' r ').read().replace( " ..\\..\\..\\ "" %COCOS2DX_HOME%\\ ")
            file = open(path + item,  ' w ')
            file.write(content)
            file.close()
         if suffix ==  " .vcxproj ":
             print( ' replace "$(ProjectDir)..\..\..\" with $(COCOS2DX_HOME)\ in *.vcxproj ')
             # replace "$(ProjectDir)..\..\..\" with $(COCOS2DX_HOME)\ in *.vcxproj
            content = open(path + item,  ' r ').read().replace( " $(ProjectDir)..\\..\\..\\ "" $(COCOS2DX_HOME)\\ ")
            file = open(path + item,  ' w ')
            file.write(content)
            file.close()

if   __name__ ==  ' __main__ ':     targetPath = checkOption()     replaceCocos2dxPath(targetPath)
相關文章
相關標籤/搜索