求教quick新的NodeExtend的写法

我看代码,NodeEx.lua里给cc.Node类添加新函数的写法为:

local c = cc
local Node = c.Node
function Node:schedule(callback, interval)
    local seq = transition.sequence({
        cc.DelayTime:create(interval),
        cc.CallFunc:create(callback),
    })
    local action = cc.RepeatForever:create(seq)
    self:runAction(action)
    return action
end


```

我仿照这个lua写了下ccui的extend,如下
local ui = ccui
local helper = ui.Helper
local Widget = ui.Widget
function Widget:test()
end


```


当执行到定义function Widget:test()时却stack overflow了...
百思不得其解,是不是quick在cc.Node时做了什么隐藏的操作?

你是从个lua中扩展 c++类方法吧?

前天阳光七月提交的pr
在tolua_beginmodule这个函数中,由于现在C++类表与它的metatable表已经分开,所以之前的代码如果在tolua_cclass中定义的类名与它的metatable名不一致,会造成metatable找不到,导致后续的域成员无法加入到metatable中。现已经修改这一问题。
*
*
不知道是否和你这个情况有关。

建议更新到最新master,再测试一下。

可能是为了避免 lua 扩展方法和 c++ 方法重名后尴尬的局面。

所以提供了 getcfunction

你用的是什么版本?

看到你在群里发的修改了,你应该用的是3.0。那个处理方式是我之前的临时处理,不够简洁和通用。现在的实现方式已经不需要对每种情况进行处理,请参考现在版本里的tolua_beginmodule函数的实现:
https://github.com/dualface/cocos2d-x/blob/v3quick/external/lua/tolua/tolua_map.c

已经解决了,是要在tolua_map.c里加入一些代码才能让ccui的metatable表被ccui的类获取.quick果然偷偷修改了原引擎的东西…:9:

MARK一下。。。。。。。。。。。。