[cocos2dx笔记008]cocos2d 用luabridge手动绑定类

基于cocos2dx 2.2.2版本。这几天使用了cocostudio实现了,动画,骨骼动画,UI编辑,粒子效果,虽然有些不足,但已经算是非常好了。今天尝试用lua,这个非常简单,创建的时候,设置语言为lua,那就可以创建lua工程。

在cocos2d-x-2.2.2\tools\project-creator下运行:

python create_project.py -project test_lua -package com.android.zdhsoft -language lua

xcopy ..\..\cocos2dx\platform\android\java\src\* ..\..\projects\test_lua\proj.android\src /E

就可以创建test_lua,就可以顺利跑起来。

但是我有些代码是C++的,想到在lua下用,感觉得用cocos2dx自带的tolua++,会影响现有的Cocos2dx框架,也可能带来潜在的风险。(除了,bug,我一般不乐意修改框架的东西)。而且需要手动绑定的也不多。于是找了几个开源的绑定框架。有luabind,luatinker,ELuna,luabridge,等。luabind需要boost库,这个太头痛了,luatinker,eluna在试用过程都有些问题(有一个不支持派生类和模板),虽然这两个是最简单的,但是功能也弱了些。最后,用luabridge顺利解决,使用起来也非常简单。

下面是下载地址:https://github.com/vinniefalco/LuaBridge

个版本已经支持lua 5.1.5,不过不支持C++0x11,例子很丰富。这里有很多例子,http://vinniefalco.com/LuaBridge/Manual.html

载后,直接解压,把LuaBridge.h,RefCountedObject.h,RefCountedPtr.h和detail下的所有头文件,全部复制到classes目录,然后在AppDelegate包含luabrigde.h就可以了。

下面是一个用于测试的类

class testA

{

public:

testA()

{

}

int getValue()

{

return 100;

}

};

下面是绑定代码

luabridge::getGlobalNamespace(pEngine->getLuaStack()->getLuaState())

.beginClass<testA>("testA")

.addConstructor<void(*) ()>()

.addFunction("getValue", &testA::getValue)

.endClass();

然后,就可以在你的lua代码使用这个类了。

local testa = testA ()

cclog("testa=%d", testa:getValue())

现在cocos2dx上面,现在出现了两个重要的lua分支, 一个是quickx,一个cocos-code-ide。quickx提供了一个非常强大的lua框架,让你写lua省心省力。而cocos ide则基于eclipse提供了一个x-man的编辑器,支持lua和js调试。这让C++情何以堪啊!

[cocos2dx笔记008]cocos2d 用luabridge手动绑定类,布布扣,bubuko.com

时间: 2024-10-12 04:19:31

[cocos2dx笔记008]cocos2d 用luabridge手动绑定类的相关文章

[cocos2dx笔记012]一定简易的UI配置类

使用cocostudio可以装载编辑好的UI,但是过于复杂.特别是在加截UI后,发现触屏事件有些问题.如果直接使用程序写死加载UI又过于麻烦.花点时间,增加了一个基于ini的UI配置类,目前只实现了CCSprite和plist的加载.其它的可以后面慢慢加 头文件 #ifndef _X_UI_H_ #define _X_UI_H_ #include <cocos2d.h> namespace zdh { USING_NS_CC; void CreateByXUI(CCNode * paramPa

cocos2dx lua 绑定之二:手动绑定自定义类中的函数

cococs2dx 3.13.1 + vs2013 + win10 1.首先按照<cocos2dx lua 绑定之一:自动绑定自定义类>绑定Student类 2.在Student类中增加一个用于测试手动绑定的函数manual_call ①Student.h中增加函数 //手动绑定调用函数 void manual_call(); ②Student.cpp中增加函数实现 //和自动绑定相比,只增加了这个函数 void Student::manual_call() { std::cout <&

[cocos2dx笔记010]用于UI的事件管理器

cocos2dx有一个编辑器:cocostudio,目前来说,已经是比较好用了,只要加载导出的资源,就可以用上了.省去手动搭建面的麻烦.但是,很多需要事件的地方,操作比较麻烦,所以这里提供一个事件管理器来集中和简化管理事件.对于C++事件委托方面,我这里使用了是FastDelegate(注:一个牛人写的).下面是具体实现的代理,不多. /* UI触摸事件管理器. 原有cocos2dx带的触摸事件,每次监听要操作的步骤比较多,为此增加了一个事件管理器,来集中和简化管理 */ #ifndef _X_

cocos2d-x笔记4: TextField不能删除内容,以及我的解决办法。。。

3.0正式版,win32下,TextField按下backspace键不能删除内容.网上搜了下,很早就有的问题了,正式版了竟然还不解决...真心无力吐槽啊!!!这种巨大而又明显的Bug... 从昨天突发奇想用Cocos2d做软件开始,经历了太多的摧残,简直听者伤心,闻者落泪... 已经去Cocoachina论坛反馈了,虽然基本白费口舌...思路就是监听按键事件,调用setText修改内容... 1 auto listener = EventListenerKeyboard::create();

cocos2d-x笔记3 : 3.0正式版调用CocoStudio

cocos2d已经有一万个新建工程的方式和一万个API改动了,而且相互不兼容...触控科技的程序员真心不怕被打哦... 网上搜到的做法大多已经不行了,原因在上一段哦... 同样都是3.0,Alpha版.Bata版.Rc版.正式版,它们调用CocoStudio的方法都不一样哦...(求超越哦...) 记录一下3.0正式版使用CocoStudio的方法,是正式版,也就是最新版哦.(当然,只相对本周而言哦...) 一.添加库: 1.右击解决方案 -> 添加 -> 现有项目 2.进入项目目录的coco

[cocos2dx笔记007]一个自定义场景切换的实例

cocos2dx框架已经提供了很多场景切换的类,但是一些自定义的场景切换,只有自己实现了.下面是实现的类.这里设计的分辨率是750*500.请根据实际的要求调整. 头文件 #ifndef _TRANSITION_GAME_H_ #define _TRANSITION_GAME_H_ #include <cocos2d.h> namespace cocos2d { class CCTransitionGame : public CCTransitionScene { public: CCTran

Cocos2d-x-3.x版 Js Binding 的手动绑定实现

网上流传的是一份2.x版本的,现在已更新到3.x,经过千辛万苦,终于调试成功. 1 .首先定义待绑定的类 AnimationKoo.h #ifndef __AnimationKoo_H__ #define __AnimationKoo_H__ namespace ls{ class AnimationKoo{ public: virtual void funcTest(); static AnimationKoo * create(); }; } #endif // __AnimationKoo

cocos2d-js 3.0 RC0 手动绑定 C++调用js,js调用C++ jsbinding

参考:http://www.tairan.com/archives/4902 参考文章是2.x版本的,对于3.0也许不合适了,没有深究. 代码:https://github.com/kenkozheng/cocos2d-js/tree/master/jsbinding(cpp_js%20js_cpp) 1 JS调用C++ 3.0中写这个绑定比较简单,跟ANE调用java如出一辙,一个JSContext,一个jsval,使用cocos2d提供的c++和js变量转换的函数做好转换即可. cocos2

[cocos2dx笔记004] android增加静态库工程

(基于2.2.2版本) 这步比较麻烦,不像vs2013那样好设置.参考了很多文章.还是不能解决问题.只有慢慢摸索了.在这里贴出来,希望能让大家能少走点弯路. 还是其于前面的文章提到的mylib这个例子.[cocos2dx笔记003] Vs2013增加静态库工程首先进到external\mylib,用文本编辑器打Android.mk 并修改图中圈中的部分 修改结果如下 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE :