zoukankan      html  css  js  c++  java
  • 自定义路径创建Cocos2d-x项目

    自定义路径创建Cocos2d-x项目

    本文介绍windows下面如何优雅的创建Cocos2d-x项目。为何称之为优雅,是因为现在网上流传的一些创建方法有一些问题。大致内容如下:

    l  使用VS向导创建Cocos2d-x项目(废弃,不建议使用)

    l  使用create_project.py

    n  问题1:工程名等替换不完全

    n  问题2:创建项目不能指定路径

    使用VS向导创建Cocos2d-x项目(废弃,不建议使用)

    Cocos2d-x 2.1.3及之前官方使用“install-template-msvc.bat”文件,安装VS创建Cocos2d-x项目向导,然后可以按照向导创建Cocos2d-x项目。注意默认情况下,新建项目的存放的位置应该设置在Cocos2d-x引擎的安装目录下面,否则可能因为找不到库文件而不能通过编译。不过可以在设置项目属性,头文件和库文件的搜索路径来解决。可以参考我之前的一篇博文《C++静态库与动态库》,里面介绍如何设置vs项目属性使用静态库和动态库。

    Cocos2d-x 2.1.4,官方建议使用“create_project.py”来创建Cocos2d-x项目,并将在版本废弃了“install-template-msvc.bat”

    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.

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

    ——来自官网: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:python27python.exe create_project.py …

    使用该方法创建项目之后,项目位于cocos2d-x/projects目录下面。windows平台进入proj.win32,打开工程文件即可。

    使用create_project.py创建项目的原理,即简单地将cocos2d-x emplate目录下的三种语言模板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%,如“......cocos2dxproj.win32cocos2d.vcxproj”替换为“%COCOS2DX_HOME%cocos2dxproj.win32cocos2d.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)
  • 相关阅读:
    R基础-适合于纯小白
    endnote将参考文献导入word中
    百度学术导入endnote出现choose an import filter解决
    数据梳理、降维--主成分分析、超易懂实例及R语言实现
    R语言输出高质量图片
    方向导数,偏导数,梯度
    开通博客
    存储引擎
    消息队列的两种模型
    消息队列的应用场景
  • 原文地址:https://www.cnblogs.com/skynet/p/3428369.html
Copyright © 2011-2022 走看看