【步兵 cocos2dx】lua绑定

【步兵 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~
之前
真爱无价,欢迎打赏~
赞赏码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值