cocos2d-x 3.x addEventListenerWithSceneGraphPriority第二个参数的作用

来源:互联网 发布:mac fn键有什么用 编辑:程序博客网 时间:2024/06/08 01:50

之前在查看一些博文中有看到关于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仍然是蓝色块对应的指针(与第二个参数一致)。

0 0
原创粉丝点击