【交流】Cocos2d-x3中带按钮的多行多列TableView

需要实现一个多行多列的Table并且单元格本身是按钮的。折腾了半天,弄了个可行版本,但是觉得很蛋疼,想看看有没有可以改进的地方或者别的做法,大家交流下。

我做的是一个多行两列的表格。原本是想做成多行表格,然后每个表格的cell为两个按钮,这也是在cocos2d-x2时期的主流做法。结果做好了之后,发现有按钮的地方就完全不能拖动了。

跟了一下,发现和现在的touch机制有关,无论是按钮,还是tableview都是sceneGraphPriority的listener,在新的触摸机制下,此类listener会根据树形结构吞touch。同时menu item肯定是tableview的孩子,所以menu item会先响应,然后直接吞掉了这个touch。

想了半天觉得不好下手,遂放弃,把按钮做成了普通和高亮两个sprite,然后根据tableview自己的回调来进行判断。这里遇到一个问题是回调只能知道这一行被按到,具体按到的是左边一列还是右边一列必须通过touch的坐标才能得到,但是这些回调里面都没有回调这个参数!!!

最后暴力的把cocos2dx的代码改了,把touch参数传进来,然后算是解决了这个问题。

有没有人想交流下别的做法?

我是修改了controlbutton,加了个有效点击范围,忽略viewsize外得点击事件

用这个做法的话,点在按钮上面的时候还是不能拖动吧?我的按钮就是整个单元格,如果点在上面不能拖动那就没有可以拖动的地方了 :3:

问下 把 touch 加到参数列表中之后, 怎么 让这个接口 在lua 中生效?

virtual void tableCellTouched(TableView* table, TableViewCell* cell,Touch pTouch) override
{
if (nullptr != table && nullptr != cell)
{
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void
)table, ScriptHandlerMgr::HandlerType::TABLECELL_TOUCHED);
if (0 != handler)
{
LuaTableViewEventData eventData(cell);
BasicScriptData data(table,&eventData);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::TABLECELL_TOUCHED,(void*)&data);
}
}
}

这个函数 里面不知道怎么改了

搞定了 昨晚

btn:setTouchSwallowEnabled(false) 就解决啦 今天遇到这个问题啦