您的位置:首页 > 移动开发 > Cocos引擎

【步兵 cocos2dx】lua绑定

2017-05-30 00:14 323 查看

【步兵 cocos2dx】lua绑定 By EOS.

最近想搞一搞自动化测试,涉及到luabinding,简单的写一篇教程。

不过并不打算写很仔细,因为这种东西网上太多一搜一大片。

刚刚实现了模拟点击,绑定到lua上了,再读取个文件模拟各种点击行为,

配合脚本每个配置文件重启运行、遍历log文件,发现error就把log文件cp过来,统计报错。

感觉大有搞头,想想都美滋滋,趁着心情好写一篇刚刚用的luabinding。

需要的东西

1、项目下两个必备的目录,从cocos官方目录下考过来
cocos2d\tools\bindings-generator
cocos2d\tools\tolua
2、必备的运行luabinding的python工具需要安装的东西
cocos2d\tools\tolua\README.mdown中都有写
[python-2.7.3.msi, PyYAML-3.11.win32-py2.7.exe, Cheetah.zip]
3、c++文件,也就是需要绑定的文件
4、复制一份 ini文件重命名(es.ini)
[es]
prefix = es
target_namespace = es
headers = %(cocosdir)s/../Classes/CppTools.h
classes = CppTools
classes_have_no_parents = CppTools
#除了以上修改,其他信息均默认即可
5、复制一份genbindings.py重命名(es_genbindings.py)
output_dir = '%s/../Classes/bindings' % project_root
cmd_args = {'es.ini' : ('es', 'lua_es_auto')}
#其他均默认,一个py对应N个ini、所以后续只需添加ini即可


生成和注册

生成:

运行
python  es_genbindings.py
就可以看到在Classes/bindings下生成的对应的文件。

注册:

//[lua_module_register_mine.h]
#ifndef __MINE_LUA_MODULE_REGISTER_H__
#define __MINE_LUA_MODULE_REGISTER_H__

#include "lua.h"
#include "scripting/lua-bindings/manual/Lua-BindingsExport.h"

CC_LUA_DLL  int  lua_module_register_mine(lua_State* L);

#endif

//[lua_module_register_mine.cpp]
#include "lua_module_register_mine.h"
#include "bindings/lua_es_auto.hpp"

int lua_module_register_mine(lua_State* L)
{
register_all_es(L);
return 1;
}

//[AppDelegate.cpp]
#include "lua_module_register_mine.h"

//.....
LuaStack* stack = engine->getLuaStack();
lua_State* L = stack->getLuaState();
lua_module_register(L);//cocos自带,写在一起就对了
lua_module_register_mine(L);


注:有一点不足,到处的cpp文件有一个路径是不对的,需要手动改一下。

不过不改编译会出错,不会遗漏的=、=

打包mk文件修改

[Android.mk]
#我这里是proj.android-studio,
#proj.andorid 应该是$(LOCAL_PATH)/../../Classes/*.cpp

MY_CPP_LIST := hellocpp/main.cpp
MY_CPP_LIST += $(wildcard $(LOCAL_PATH)/../../../Classes/*.cpp)
MY_CPP_LIST += $(wildcard $(LOCAL_PATH)/../../../Classes/bindings/*.cpp)

LOCAL_SRC_FILES := $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)


网上也有递归自动搜索路径的,不过我是lua开发,这样够用了,而且就算路径变多,

写个脚本输出一下也是分分钟的事情,懒得折腾了,ruby: required ‘find’ 是个好东西。

齐活,生存在开发路径下的luabinding就完成了。

最后是lua的调用,就再简单不过了

ctl = es.CppTools
ctl.moniClick(130, 221, 1)--[x, y, delay]


总结

除非必须我是不建议,把自己的代码混在底层代码里的。因为这样如果cocos修复了某些bug进行,

版本升级或者代码合并的时候会给自己添加很多不必要的麻烦。

lua更是如此,cocos自带的lua代码,理都不要理它,看着不爽require一个覆盖掉,

[bushuangCocos.lua]
cc.p = function(x, y)
local pos = {x=x, y=y}
function pos:add(a_x, a_y)
_ = a_x and self.x = self.x + a_x
_ = a_y and self.y = self.y + a_y
end
return pos
end

require "cocos/init"
require "bushuangCocos"


就写这么多,晚安~

See Again~

之前

真爱无价,欢迎打赏~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息