[Bugfix]ccui.Helper 接口获取组件lua_bindings代码出错

存在 bug 的版本

Quick-Cocos2dx-Community 3.6 Release。

bug 将在 Quick-Cocos2dx-Community 3.6.1 中修正。

bug 描述

按理来说,quick 中获取CocoStudio组件的方法应该有3种。

1: 使用传统的getChildByXXX(name/tag) 方法获取。这种方法较麻烦,要一层一层的获取子控件,不能越级获取。

2: 使用 C++ 绑定到 lua 的 ccui.Helper 接口来获取。但 Here is a bug!

ccui.Helper:seekWidgetByName(parent, name)方法和 ccui.Helper:seekWidgetByTag(parent, tag) 方法中传入的 parent 参数必须是 ccui.Widget。然而加载 Studio导出资源的三种方法中只有 ccs.GUIReader接口返回的是 ccui.Widget 结果。另外两种 cc.CSLoader 和 cc.uiloader 接口返回的结果都是 cc.Node。
这就使得当我们使用 cc.CSLoader 加载Studio 2.x 资源时,不可以用 ccui.Helper 的方法获取控件。此时,会报形如以下的错:

    invalid arguments in function 'lua_cocos2dx_ui_Helper_seekWidgetByName'
    invalid arguments in function 'lua_cocos2dx_ui_Helper_seekWidgetByTag'

这显然是不可行的。所以我们需要修改相应的 lua_cocos2dx_ui_Helper_seekWidgetByName 和 lua_cocos2dx_ui_Helper_seekWidgetByTag 函数。

3: 使用cc.uiloader接口自己封装的方法来获取。该接口封装的不完善,使用 cc.uiloader:seekNodeByName(parent, name) 方法来获取组件时,只有当加载的 Studio 文件为json 文件(即传入的 parent 参数是通过 cc.uiloader:load 方法加载)时才能正常获取。当Studio 文件为 csb 文件时, parent.name 始终为空,得到的组件也就始终为空。该bug暂时未能解决。

解决方案

修改 lua_cocos2dx_ui_Helper_seekWidgetByName 和 lua_cocos2dx_ui_Helper_seekWidgetByTag 函数。
具体实现见 commit 信息:f0fe3b9d6c6886cb81687fd0fa63083f4f4e1012

标签: none

?>