2.0UI的Node和ScrollView的Bug

具体Bug描述:使用2.0创建一个Node类型的csd文件,里面创建Sprite,Button等。当把这个节点单独加到某个view页面的时候,里面的对象都可以收听到触摸事件;当把这个节点加入ScrollView时,ScrollView的滚动事件被这个原件遮挡了,拖动点在这个原件的区域内时,拖动无反应。

我的解决办法是这样的,这个Node里面创建了一个Panel,所有原件放Panel里面,每次读取到Node都把Panel取出来用,把Node直接抛弃。我想原因是这个Node没有继承滚动事件了,但总不能老这样去适应编辑器,期待解决。

还有另外一种解决方式,因为滚动事件都是Widget以上才能够继承下来,在解析Node的时候,不使用cc.Node来创建这个根节点,而是使用ccui.Widget来创建,这样整个UI体系就都在cocosStudio内了,但这个得改源代码才能解决。

Scroll里头再加Scroll?
这个时候你是想拖动哪个层?

当把这个节点当作一个ScrollView的子原件加入ScrollView时
这句话有歧义,我的意思是这样的: ScrollView:addChild(Node)

这个问题确实会有。。。
因为在UI框架下widget的touch事件是会从子节点传到根节点的,但是如果在这之间存在node,就会把这个事件截断。
而用CSLoader创建出来的加载出来的UI树的根节点就是一个Node。

你可以这么处理

Widget *widgetNode = Widget::create();
for(auto child : node->getChildren())
{
child->retain();
child->removeFromParentAndCleanup(false);
widgetNode->addChild(child);
child->release();
}

把你的根节点换成一个Widget节点