之前在查看一些博文中有看到关于addEventListenerWithSceneGraphPriority第二个参数的作用,有说并没有什么作用,有的说,是将监听器与Node类对象绑定,从而在节点释放的时候监听器(Listener)同时一起释放,今天发现其第二个参数还有另外的用处,特来分享,不知正确与否~如有错误望大神指正
首先在层HelloWorld上我添加了一个蓝色块sprite:
代码如下:
auto sprite1 = Sprite::create("CyanSquare.png");
sprite1->setPosition(origin + Point(size.width / 2, size.height / 2) + Point(-80, 80));
addChild(sprite1, 10);auto listener1 = EventListenerTouchOneByOne::create();listener1->onTouchBegan = [](Touch* touch, Event* event)
{
// 获取事件所绑定的 target
auto target = static_cast<Node*>(event->getCurrentTarget());
// 获取当前点击点所在相对按钮的位置坐标
Point pt = touch->getLocation();
Point locationInNode = target->convertToNodeSpace(pt);
Size s = target->getContentSize();
Rect rect = Rect(0, 0, s.width, s.height);
// 点击范围判断检测
if (rect.containsPoint(locationInNode))
{
log("sprite began... x = %f, y = %f", locationInNode.x, locationInNode.y);
target->setOpacity(180);
return true;
}
log("next pass");
return false;
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, this);当设置第二个参数为this(也就是HelloWorld层)时:当我在蓝色块上触摸时,得到的pt坐标经过target->convertToNodeSpace(pt)转换后坐标不变,由此看出,即使在蓝色块上触摸,得到的target仍然是HelloWorld层(与第二个参数一致)。
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, sprite1);当设置第二个参数为sprite1(也就是蓝色块)时
当我在蓝色块外触摸时,得到的pt坐标经过target->convertToNodeSpace(pt)转换后坐标变化,由此看出,即使在蓝色块外触摸,得到的target仍然是蓝色块对应的指针(与第二个参数一致)。
这篇博客探讨了cocos2d-x 3.x中addEventListenerWithSceneGraphPriority方法的第二个参数的实际作用。作者发现这个参数不仅与Node对象绑定,在节点释放时一起释放监听器,还存在其他用途。文章通过代码示例展示了该参数的应用,并邀请读者讨论其正确性。
943

被折叠的 条评论
为什么被折叠?



