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

这篇博客探讨了cocos2d-x 3.x中addEventListenerWithSceneGraphPriority方法的第二个参数的实际作用。作者发现这个参数不仅与Node对象绑定,在节点释放时一起释放监听器,还存在其他用途。文章通过代码示例展示了该参数的应用,并邀请读者讨论其正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值