转自:https://www.cnblogs.com/zisou/p/cocos2dx-lua1.html

为什么要使用Lua进行游戏开发?转载请注明出处http://www.cnblogs.com/zisou/p/cocos2dx-lua1.html

上面一个问题我觉得在我们使用Lua之前需要深入思考的,Lua有何优点?缺点又是什么?先找准自己的项目定位

在什么时候使用是很必要的;

经过自己一番摸索之后有如下结论:

优点:

1,嵌入式脚本开发可以跳过平台市场进行独立的游戏资源更新;

2,在使用Lua开发能降低在使用C++中得指针引用报错,nil类型问题;

3,可以使用Lua表结构来完成面向对象;

还有一个项目定位的问题,那就是开发游戏,用全Lua,还是C++绑定Lua呢?

全Lua:

如果使用全Lua,我建议完全使用Cocos2d-x触控官方收购了成都的Quick-Cocos2dx!用Quick开发优势就一个

字!快!官方提供的框架(quicklua包)目前是2.2版本(3.0以后也会同步),以后我会补上配置Quick开发的环境;

C++绑定Lua:

在项目定位中,只有一部分模块(活动等)需要使用Lua开发,那就必须半路出家,从中途绑定上Lua,进行C++和

Lua的交叉开发,这种绑定开发是比较流行的,因为C++能利用Lua的优势实现自更新,Lua也能依赖C++借助它的

底层开发能力完成相对复杂的开发;

上面对Lua的使用做了个概述,下面直接进行重要环节了,将会在xcode和eclipse上实现cocos2dx+lua!

本篇可能有点长,自带小板凳,瓜子观看;

———————————————————————————————————————————————————

使用版本Cocos2dx2.2版本,

Xcode中手动绑定 Cocos2dx+lua:

1,首先新建一个cocos2dx新工程,怎么建都可以,最终能再Xcode运行起来都行;

2,新建好后在libs文件夹下面添加Lua的libs包;

这个是我用xcode新建出来的Lua项目,里面自带了一个包Lua文件夹;

也可以使用cocos2dx自带:

对比后发现用了4个目录,cocos2dx_support,lua,luajit,tolua

3,添加完成之后点Run会报错,是因为缺少CocoStudio这个库,如果你项目以后要使用CocoStudio那就再把库导进来,如果不用

那就直接注释掉CocoStudio相关的就可以跑起来了!

4,OK跑起来之后,我们就可以使用Lua脚本了,我们先简单写一个测试的(功能为在C++加载一个CClayer,CClayer中有一个

背景精灵图片)

(一)首先我们需要先把lua脚本代码写出来

testlua.lua

 View Code

如果你有一些编程经验,学习lua,js这种脚本语言是很轻松的,去网上下载Lua教程可以先了解一下!

(二)在之前我已经写了一个单例方法使用的PublicLuaTodo类,主要就是引用官方给我们提供的CCLuaEngine(Lua支持引擎)

这是一个在cocos2dx中操作Lua的中间件工具类,我已经封装好了,怎么去使用Lua的方法;

下面我直接贴代码:

PublicLuaTodo.h

 View Code

PublicLuaTodo.cpp

 View Code

上图是我工程全部准备好的结构;

(三)执行我们已经运写好的Lua文件:

    string luafile = "test/test.lua";PublicLuaTodo::getInstance()->toDoLuaFile(luafile);

我把上段代码写到了helloapp里面的关闭方法中, 很方便就能运行起来Lua新加的层!

5,使用toLua++ 工具类实现在Lua中调用C++方法

(一)在工程中我还引入了一个做适配的类VisbleRect.h是C++写的,主要作用是获取屏幕各个方向上的坐标,

方便使用适配后的坐标点。要使用这个类cocos2dx提供了工具tolua方法,原理就是通这tolua++IPA调用通过

自己创建的XX.pkg文件,生成出对应供lua调用的类LuaCocos2d.cpp接口,lua能对应寻找对应方法在Lua中

使用。

(二)编写需要调用的XX.pkg文件:

定位到:/Users/youmacname/cocos2dx.2.2/cocos2d-x-2.2/tools/tolua++ 中,并在该目录下编写VisbleRect.pkg文件

编写规则参见README翻译如下:  
  1) enum keeps the same
    2) remove CC_DLL for the class defines, pay attention to multi inherites
    3) remove inline keyword for declaration and implementation
    4) remove public protect and private
    5) remove the decalration of class member variable
    6) keep static keyword
    7) remove memeber functions that declared as private or protected

VisbleRect.pkg

 View Code

(三)修改/cocos2dx.2.2/cocos2d-x-2.2/tools/tolua++ 中的Cocos2d.pkg,添加$pfile "VisibleRect.pkg"这一行

(四)继续修改如下路径:

定位到:/cocos2dx.2.2/cocos2d-x-2.2/tools/tolua++/下

Makefile文件

Cocos2d.pkg文件

修改成你自己想生成的路径

(五)打开终端运行./build.sh ,编译生成新的带接口的LuaCocos2d.cpp

(六)将新生成的LuaCocos2d.cpp复制到我们工程目录下

对应工程目录

/Users/youmacname/myluatest/myluatest/libs/lua/cocos2dx_support/

替换掉原有的LuaCocos2d.cpp

(七)这时直接xcodex运行run会报错,需要在工程里面LuaCocos2d.cpp中添加VisbleRect.h头文件的路径。

#include "/Users/youmacname/myluatest/myluatest/Classes/VisibleRect.h"

再点Run就不会报错了,到这一步应该也了解了整个Cococs2dx运行Lua的原理和机制!

恭喜你可以使用VisibleRect里面所提供的静态方法了!意味着Lua也可以调用C++了!!

我们来实际在Lua中操作一下

修改test.lua

 View Code

OK,改完之后Run一下

到现在为止我们已经完成了在xcode上面绑lua并使用tolua++调用C++的方法!

———————————————————————————————————————————————————

Android 上面绑Lua

如果你没有配置过mac上的android环境,那么请看这篇【cocos2d-x 环境配置-Mac配置篇】

1,同样也是先创建一个新工程;

./create_project.py -project XXX-package com.xxx.XXX -language cpp

2,将刚才我们在xcode上写的东西新加的类都移植(复制对应目录就行),并编写对应的.mk文件

3,工程可能会报错,先导入libPluginPrptocol Cocos2dx提供的扩展包

/Users/youmacname/cocos2dx.2.2/cocos2d-x-2.2/plugin/protocols

右键myluatest 工程->Android->library ->add libPluginPrptocol进来

4,这步是重要环节,也是理解android工程中绑lua是如何工作的!

按照上图,我们需要对应添加

LOCAL_WHOLE_STATIC_LIBRARIES += cocos_lua_static

lua静态库和我们需要lua单独的.so  android工程

$(call import-module,scripting/lua/proj.android)

OK,现在我们run一下会报错!!和在xcodex上面是一样的原因!我们还得替换掉原有的LuaCocos2d.cpp!

android  $(call import-module,scripting/lua/proj.android) 的真实路径如下:

/Users/youmacname/cocos2dx.2.2/cocos2dx2.2/scripting/lua/cocos2dx_support/

我们需要将LuaCocos2d.cpp替换掉/Users/youmacname/cocos2dx.2.2/cocos2dx2.2/scripting/lua/cocos2dx_support/

下面的LuaCocos2d.cpp

并且和IOS一样还要修改里面的路径,此时路径应该填andriod下面的,可以填绝对路径!

以上步骤完成就可以点android Run了!!

成功生成了.so文件,标志着android也运行起来了!

以上就是android  工程中手动绑定并使用tolua++内容!

这篇文章确实有点长,希望对大家有用!Lua下一篇我会说一下如何C++和Lua数据传值,互调方法等我已经处理好的类库;

————————————————————————————————————

本章Xcode源码地址:百度云盘

ps:仙凡奇缘官网 http://www.xianfancoco.com

cocos2dxQQ交流群:41131516

Cocos2dx-Lua与C++混合使用相关推荐

  1. cocos2d-x lua 学习笔记(1) -- 环境结构

    Cocos2d-x 3.0超过环境的版本号来建立和前Cocos2d-x 2.0 差异较大的版本,从同时Cocos2d-x 3.0项目打包成apkAndroid的应用程序文件,步骤,构建环境有些乏味安德 ...

  2. cocos2d-x lua table数据存储

    cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...

  3. cocos2d-x lua 学习笔记(1) -- 环境搭建

    Cocos2d-x 3.0以上版本的环境搭建和之前的Cocos2d-x 2.0 版差异较大的,同时从Cocos2d-x 3.0项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭建一次之后, ...

  4. Cocos2d-x Lua中实例:帧动画使用

    Cocos2d-x Lua中实例:帧动画使用 下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮标题变为Stop,点击Stop按钮可以停止播放动画. ...

  5. cocos2d-x+lua开发模式下编辑器的选择

    cocos2d-x+lua开发模式下编辑器的选择 原本打算直接用CocosIDE的,毕竟是官方出品,并且支持Android远程调试,windows下的调试也非常方便,调试的信息也非常全,智能提示也不错 ...

  6. 反编译 cocos2dx+lua

    严正声明:本帖所有的技术手段仅供用于技术学习使用,禁止用于商业目的! 1.准备工作 下载要反编译的 apk 文件(Android安装包),然后解压. 2.获取XXTEA的Key和Sign 目前大多数的 ...

  7. Cocos2dx Lua开发环境搭建

    本文记录在 Windows 下搭建 cocos2dx lua 开发环境,还有调试设置. 系统:Windows 7 64 IDE:Mircrosoft Visual Studio 2013 Cocos2 ...

  8. cocos2dx lua 日志系统

    在实际开发过程中,代码日志是必不可少的系统,尤其是在线上版本中,对于查找问题相当有帮助.但是cocos2dx lua的代码日志是基于lua的print打印,只写在console中,不会长久保存.怎么办 ...

  9. Cocos2d-x Lua cc ccsccui区别和使用

    其实这些区别归因于cocos2dx lua对应API版本号的问题,因为以前cocos用cocos2d-lua写,后来带领大家往quick转,现在合并后,又带领大家回到cocos-lua,所以必定会产生 ...

最新文章

  1. sigaction函数学习
  2. 1MySQL是面向对象型数据库_数据库及MySQL基础(1)
  3. linux安装minikube(Ubuntu/deepin)
  4. php 连接数据库 pod,PHP PDO类解决数据库连接问题
  5. 云锵基金 2019 年 04 月简报
  6. php饼图只有一个小方块_如何用Python画一个好看的饼图
  7. 图像局部特征(十二)--BRISK特征
  8. 实际测试中,经常发现摄像头断线几分钟
  9. 10g添加用户 oracle_linux安装oracle
  10. Android连接mumu模拟器
  11. 行路难PPT计算机考试,《行路难》公开课.ppt
  12. 蜻蜓和蝉c语言,趣味数学:蜻蜓、蜘蛛、蝉它们的翅膀和腿
  13. Coremail-0day敏感文件泄露漏洞送附批量检测脚本
  14. 网卡驱动的队列数据的接收e100
  15. python复制word全部内容,包括图片、文字、格式
  16. 4月日本旅游签证简化办理攻略分享
  17. TS文件下载器(按照M3U8列表 批量下载)
  18. Halcon 字体设置
  19. group_concat函数用法
  20. 聚合物钽电容和普通钽电容的区别

热门文章

  1. 计算机英语forward,英语forward是什么中文意思
  2. windows安装qt5的步骤
  3. RedisInsight :Redis 官方可视化工具来啦
  4. eclipse 下载
  5. 应届生为什么有的试用期还没有过就被辞退了?
  6. Google Play应用上架流程 超详细!
  7. 暑期Python编程打卡训练营计划!
  8. Deep Ordinal Regression Network for Monocular Depth Estimation 单目深度估计,论文阅读,DORN;视频笔记
  9. 算法提高 分解质因数
  10. 《三》微软Dynamics CRM 2016单服务器安装部署(Dynamics CRM 2016 安装)