从cocos2d-x-2.x到cocos2d-x-3.x: lua项目配置
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项目配置的更多相关文章
- cocos2D(三)---- 第一cocos2d的程序代码分析
在第一讲中已经新建了第一个cocos2d程序,执行效果例如以下: 在这讲中我们来分析下里面的代码,了解cocos2d的工作原理,看看屏幕上的这个"Hello World"是怎样显示 ...
- 小尝试一下 cocos2d
好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...
- 在cocos2d里面如何使用Texture Packer和像素格式来优化spritesheet
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- Cocos2d入门--3--小球运动
本章直接上源代码.内容不难,主要就是 HelloWorldScene.h文件: #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H_ ...
- cocos基础教程(5)数据结构介绍之cocos2d::Value
1.概述 cocos2d::Valie 是一个包含了很多原生类型(int,float,double,bool,unsigned char,char* 和 std::string)外加 std::vec ...
- cocos基础教程(5)数据结构介绍之cocos2d::Map<K,V>
1.概述 cocos2d::Map<K,V> 是一个内部使用了 std::unordered_map的关联容器模版. std::unordered_map 是一个存储了由key-value ...
- cocos基础教程(5)数据结构介绍之cocos2d::Vector
cocos2d::Vector cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器.cocos2d::Vector<T>中的元素是按序存取的,它的低层实 ...
- cocos2d::Vector
C++中的vector使用范例 一.概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector是一个容器,它能够存放各种类型的对象,简 ...
- cocos2d ccitemimage
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class H ...
- ! cocos2d 预编译重复
由于预编译文件重复,导致下面的类没有被编译,所以,在写代码的时候也没有提示还报错,说LoadingScene没有定义. #ifndef __HELLOWORLD_SCENE_H__ #define _ ...
随机推荐
- 2017.11.2 Talk to customers for an hour
yesterday::: Hi Huang, For the better performance of the test the Con 6 should be connected all the ...
- Ubuntu使用PlayOnLinux笔记
playonlinux官网:https://www.playonlinux.com/en/ 帮助文档:https://www.playonlinux.com/en/documentation.html ...
- 9.详解引擎(InnoDB,MyISAM)的内存优化攻略?
整理自互联网!! 本篇我们讲解内存优化. 注意:以下都是在MySQL目录下的my.ini文件中改写. 一.InnoDB内存优化 InnoDB用一块内存区域做I/O缓存池,该缓存池不仅用来缓存InnoD ...
- eclipse 智能提示js和jquery等前端插件
使用Eclipse写Jquery和Javascript代码的时候,是没有智能提示的.我们可以使用一个插件来解决这个问题. 安装完成后,Eclipse会自动重启.重启之后,我们在项目上右键, 根据自 ...
- Java进阶面试问题列表
面向对象编程的基本理念与核心设计思想 解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling). 继承(Inheritanc ...
- 使用sqlmap执行SQL注入攻击
sqlmap是开源的SQL注入自动攻击工具,它可以自动的探测SQL注入点并且进一步控制网站的数据库. Kali Linux默认安装了这个工具. 找到潜在的攻击目标 第一步是找到有SQL注入漏洞的网站. ...
- vue动态 设置类名
<div class="tab"> <navigator :class="currentTab=='mzfw'?'nav active': 'nav'& ...
- 《笔者带你剖析Apache Commons DbUtils 1.6》(转)
前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更 多的是依靠Hibernate.Ibatis.Spring JDBC.JPA等大厂提供的持久层技术解决方案, ...
- Oracle中exp,imp(导入导出)数据迁移注意事项
这几天做开发库schema备份,出现些问题,记录一下.一,exp时,os语言环境和数据库不同时会自动发生转换. 如果操作系统的字符集小于数据库字符集,就可能出现乱码现象.imp时,同理,也是有可能 ...
- Jvm垃圾回收器详细
1, 串行回收器 1.1, 新生代串行回收器 (1)特点: –它仅仅使用单线程进行垃圾回收 –它是独占式的垃圾回收 –进行垃圾回收时, Java应用程序中的线程都需要暂停(Stop-The-Wo ...