cocos2dx-x3.0的正式版出来也有一段时间了,现在最新的版本是到了3.2alpha,和2.x系列相比,能够找到的相关资料除了官网上的wiki,其他的也不见得多,遇到的一些和2.x的差异和问题在这里记录下来备忘。

和2.x的shell脚本相比,3.x系列的配置全部python化了,最大的好处当然是跨平台,在windows下面也可以脱离cywin进行android版本的编译,虽然ios版本还是离不开xcode,但是可以mac和win分别编译不同版本的感觉还是不错的,省时省力。

先从python开始,在3.x的lua项目中除了android版本的编译,还有一个更重要的部分是lua-binding的生成,与2.x要在tolua++中手写.pkg文件不同,3.x所采用的bindings-generator(位于cocos2d-x/tools下)基本上是全自动解析的,自己新加入的一些需要绑定的cpp类只需要添加(独立于cocos2d-x模块外的部分)或修改(修改cocos2d-x自身)一下cocos2d-x/tools/下的ini文件即可,确实方便了不少,但是相对的配置的麻烦也出来了。

想要通过执行cocos2d-x/tools/tolua/下的genbindings.py来生成对应的绑定文件(位于cocos2d-x\cocos\scripting\lua-bindings\auto,也可以通过修改genbindings.py文件来生成到不同路径下),就得先准备好python,python的两个插件,ndk。这里的python也可以用于3.x项目文件的生成以及android版本的编译,项目生成在后面再说,虽然有些因果倒置,但是还是提前从这里入手。

在cocos2d-x\tools\tolua下面的README.mdown以及官网的wiki上有记载怎么样安装,这里单独说一下windows版的配置,就windows版需要手动diy的部分比较多:

1.readme中说需要的是ndk:android-ndk-r9b,现在官网最新的版本是android-ndk-r9d,建议用最新版本,根据操作系统选择32位或64位的版本,要和后面的adt和jdk保持一致,但是如果用r9c和r9d的话,需要将tolua下的ini里面的android_headers中的4.7改为4.8,这也就是为什么readme中要求用r9b的原因,(另外提一句如果用r9c在生成的时候还会出错,需要根据报错的地方修改ndk中对应的math.h文件注释掉出错的那一行),下好后解压,然后将解压的路径新增到环境变量的NDK_ROOT中

2.安装python, (32bit) from (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi). 这个就严格按照要求来,注意是32位版本的,64位版本的装不了所需的两个插件。装好后将python的安装路径加到环境变量PATH里,重开cmd命令行输入python看看有没有即可验证。接着装pyyaml: http://pyyaml.org/download/pyyaml/PyYAML-3.10.win32-py2.7.exe 以及pyCheetah :https://raw.github.com/dumganhar/cocos2d-x/download/downloads/Cheetah.zip, 下下来解压到 python路径的“Python27\Lib\site-packages”里

这样一来就万事俱备了,在cmd的tolua路径下运行python genbindings.py,然后就可以生成lua绑定了。

说完这个,回到开始的项目配置,python这个主角已经装好了,ndk也入住了,要通过cocos2d-x下面的setup.py生成新项目还需要一些其他的东西,基本都是用来编译android项目的:

adt:Android Development Tools,注意32位还是64位的版本,和ndk以及jdk保持一致,这个决定了android的api level,可以通过附带的skdmanager来下载不同版本android的api用于编译。下载好后解压,然后在环境变量中新增ANDROID_SDK_ROOT指向此路径下的sdk目录。以后可以用这个里面的eclipse来debug生成的android项目

jdk:Java SE Development Kit,依然注意32位还是64位版本,和ndk以及adt保持一致,一定是jdk,仅有jre是不行的。下载好后安装,安装完成后在环境变量中新增JAVA_HOME指向此路径,可以在cmd中输入java和javac都能有输出来验证

ant:Apache Ant,用于辅佐编译android项目(Apache Ant is a Java library and command-line tool that help building software),下载好后加压,在环境变量中新增ANT_ROOT指向此路径下的bin目录,然后再加入PATH中,可以在cmd中输入ant验证

最后,添加一个环境变量COCOS_CONSOLE_ROOT指向“cocos2d-x-3.x\tools\cocos2d-console\bin”这个路径,然后就可以在cmd中到cocos2d-x-3.x的路劲中运行python setup.py。这样一切都搞定了(?),在cmd中运行cocos,可以创建项目,编译项目等等一条龙服务。创建一个新项目:cocos new MyGame -p com.MyCompany.MyGame -l lua -d ./MyCompany ,-p后面接的是android的包名, -l可以选择cpp或者lua,-d就是目录了,这样实际上是根据不同的项目模板(cocos3.x/tests下面)来生成新的工程配置文件。

生成之后cmd进入该目录,可以输入cocos compile -h看看编译的参数表,3.2alpha新增了不少选项,有待尝试。-p android可以生成android项目,--ap 后面的参数就是adt里android的api level,还有一个比较有用的--ndk-mode,除了debug和release以外还可以选择clean作为参数重新编译项目。

cocos这个命令所用到的python文件都在cocos2d-x-3.x\tools\cocos2d-console下面,编译android的在plugin目录下的project_compile/build_android.py。如果要添加其他需要编译的路径(比如说自己要用的cpp库),修改project-android下的build-cfg.json文件,加入新的路径到ndk-module-path中,注意相对路径

相比cocos2d-x-2.x那个windows系统需要在cywin下运行的build_native.sh来编译android工程,新的基于python的配置文件要更加自动化,脚本化一些,虽然在最开始也感觉这个cocos命令一下集成了许多的功能让人不知道从何下手,还不如2.x时候一个文件来得直接(3.x也可以一个文件,就是build_android.py来搞定,稍加配置然后python build_android.py -p apilevel myGame即可),但是经过一段时间的使用,无论从lua的绑定还是自动编译的过程而言,3.x这套脚本配置确实要进化了很多,当然,3.x相对于2.x进化的不只是在这方面,还有许多新的feature(坑)加入,这个请听下回分解。

从cocos2d-x-2.x到cocos2d-x-3.x: lua项目配置的更多相关文章

  1. cocos2D(三)---- 第一cocos2d的程序代码分析

    在第一讲中已经新建了第一个cocos2d程序,执行效果例如以下: 在这讲中我们来分析下里面的代码,了解cocos2d的工作原理,看看屏幕上的这个"Hello World"是怎样显示 ...

  2. 小尝试一下 cocos2d

    好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...

  3. 在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet

    免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...

  4. Cocos2d入门--3--小球运动

    本章直接上源代码.内容不难,主要就是 HelloWorldScene.h文件: #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H_ ...

  5. cocos基础教程(5)数据结构介绍之cocos2d::Value

    1.概述 cocos2d::Valie 是一个包含了很多原生类型(int,float,double,bool,unsigned char,char* 和 std::string)外加 std::vec ...

  6. cocos基础教程(5)数据结构介绍之cocos2d::Map<K,V>

    1.概述 cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value ...

  7. cocos基础教程(5)数据结构介绍之cocos2d::Vector

    cocos2d::Vector cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器.cocos2d::Vector<T>中的元素是按序存取的,它的低层实 ...

  8. cocos2d::Vector

    C++中的vector使用范例 一.概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector是一个容器,它能够存放各种类型的对象,简 ...

  9. cocos2d ccitemimage

    #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class H ...

  10. ! cocos2d 预编译重复

    由于预编译文件重复,导致下面的类没有被编译,所以,在写代码的时候也没有提示还报错,说LoadingScene没有定义. #ifndef __HELLOWORLD_SCENE_H__ #define _ ...

随机推荐

  1. 获取整个页面HTML的信息以及注意事项

    两种方式: 1.从每个节点获取 var a = '<!DOCTYPE html><html lang="zh-cn">'; var z = "&l ...

  2. L128

    How Google Search Results Work Political leanings don't factor into Google's search algorithm. But t ...

  3. 【python】ConfigParser写入和读取配置文件

    参照博客 http://www.cnblogs.com/TankXiao/p/3038350.html 配置文件格式: [section1] name = tank age = 28 [section ...

  4. 学习window.open()及问题分析

    以前对window.open()理解的不透彻,最近因为产品需要,重新学习了一下,以下为一些收获和问题总结: 调用方式:window.open(url , winName , style); url:弹 ...

  5. NLTK下载语言素材中碰到的certificate verify failed (_ssl.c:749)

    NLTK是什么? NLTK是一个开源的项目,包含:Python模块,数据集和教程,用于NLP的研究和开发. NLTK由Steven Bird和Edward Loper在宾夕法尼亚大学计算机和信息科学系 ...

  6. Flask中的ORM使用

    前言 ORM拓展 安装 数据库设置 使用 关系 单表操作 建表 应用表结构 CRUD 添加查找操作 更新操作 删除操作 一对多 多对多 总结 前言 最近几天接触了一下Flask,在惊叹于其简洁性的同时 ...

  7. struts2逻辑视图类型汇总与解释(转)

    在struts2框架中,当action处理完之后,就应该向用户返回结果信息,该任务被分为两部分:结果类型和结果本身. 结果类型提供了返回给用户信息类型的实现细节.结果类型通常在Struts2中就已预定 ...

  8. Ant入门: Hello World with Apache Ant

    笔者因项目需要进行java程序打包,之前一直使用的最多的打包工具要数fat-jar了.此工具将所有引用的jar包以及源码生成的class一起打到一个包里面,运行程序的时候直接运行命令:java –ja ...

  9. squid http_access中的逻辑关系

    http_access通过acl实现访问控制,方法 acl A acltype argument acl B acltype argument 逻辑关系:或 http_access allow|den ...

  10. 用JQuery写出登录弹出框

    类似百度的登录弹出框,可用jquery的fadeIn(),hide(),show(),slideDown()等动画函数实现,一下为html5 代码: <!DOCTYPE html> < ...