【回调特性】给lua版本添加回调特性支持。

使用示例~~~

需要按下面的步骤给C++运行时加点代码。。。:

1.把附件中的文件押解到class文件夹中:一般在frameworks\runtime-src\Classes

2.打开VS的sln文件:frameworks\runtime-src\proj.win32(ProjectName).sln

3.右击你的项目,添加,添加现有项,把刚才放在classes的几个文件添加进去。

4.在AppDelegate.cpp中,包含两个两个hpp头文件:
#include “lua_cocos2dx_customclass_auto.hpp”
#include “lua_cocos2dx_customclass_manual.hpp”
在applicationDidFinishLaunching函数里边调两个注册接口。注意顺序

5.然后编译。
搞定,可以像图1里边愉快地使用回调特性啦

附件:
Classes.zip (6 KB)

如 @http://www.cocoachina.com/bbs/u.php?action=feed&uid=25109 找到的一个问题

Reader:create 会autorealse创建的对象。

所以如果要保存Reader需要retian这个Reader 但我没有导出retain函数。

所以需要用tolua.cast也就是

tolua.cast(reader,“cc.Ref”):retain()

然后在程序退出的时候

tolua.cast(reader,“cc.Ref”):
release()

当然,你也可以在C++中用CustomRootNode和CustomRootNodeReader来处理回调特性。

NICE :2:

有了有什么问题跟我说哦。

已知reader对象生命周期有问题。要麻烦版主修了。

请问LZ,
我在cocos studio中给button的属性设置–>回调方法->click应该设置什么呢?比如说我设置一个onClickMy作为click的回调函数,那么我lua端应该怎么写呢?
是不是应该这么写呢?

 local obj = CustomNode.CustomRootNodeReader:create()
    obj:setEventLocator(
        function ( funcname )
            print(func)
            return function (sender,evt)
                print("onClickMy", sender ,evt)
            end
        end)
    local myobj = obj:createNode("NewScene","TestNodeButton.csb")
```

两个csb文件,一个是按钮一个是场景,因为都有点击事件所以两个都设了自定义类为CustomRootNode,场景里面有用到按钮。
加载完成后发现getChildren获取不到按钮这个结点。
跟踪代码发现是lua_cocos2dx_Node_getChildren >>> ccvector_to_luaval

            std::string typeName = typeid(*obj).name();     //名字跟lua_register_CustomNode_CustomRootNodeReader绑定时不一样,找不到类型
            auto iter = g_luaType.find(typeName);        
            if (g_luaType.end() != iter)

版主cocos2.2.1支持吗?目前是cocos2dx 3.4final版

附件下载不了