cocos2dx 3.x事件监听

cocos2dx 3.x事件监听,第1张

概述使用了cocos2dx 3.10,当使用到点击事件时,想像3.0之前的版本那样使用,结果却发现,基类函数无法在lambda(这是什么鬼,我其实不知道。。)中使用。。。。 virtual bool ccTouchBegan(cocos2d::Touch* touch, cocos2d::Event ev); 上面的声明方式却无法使用,后来网上看才发现,3.0以上版本的事件定义方式,简单便捷些,如:

使用了cocos2dx 3.10,当使用到点击事件时,想像3.0之前的版本那样使用,结果却发现,基类函数无法在lambda(这是什么鬼,我其实不知道。。)中使用。。。。

virtual bool cctouchBegan(cocos2d::touch* touch,cocos2d::Event ev);

上面的声明方式却无法使用,后来网上看才发现,3.0以上版本的事件定义方式,简单便捷些,如:
auto Listener1 = EventListenertouchOneByOne::create();//创建一个触摸监听 this->setSwallowstouches(true);

Listener1是单点触摸事件的声明,当然,还有其他的一些事件,这里就不一一列举了。
//通过 lambda 表达式 直接实现触摸事件的回掉方法  Listener1->ontouchBegan = [](touch* touch,Event* event) {	auto target = static_cast<Sprite*>(event->getCurrentTarget());	Point locationInNode = target->convertToNodeSpace(touch->getLocation());	Size s = target->getContentSize();	Rect rect = Rect(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;	}	return false;};Listener1->ontouchmoved = [=](touch* touch,Event* event) {	auto target = static_cast<Sprite*>(event->getCurrentTarget());	target->setposition(target->getposition() + touch->getDelta());};Listener1->ontouchended = [=](touch* touch,Event* event) {	auto target = static_cast<Sprite*>(event->getCurrentTarget());	log("sprite ontouchesEnded.. ");	target->setopacity(255);	Point locationInNode = target->convertToNodeSpace(touch->getLocation());	Point spriteLocation = g_Monkey->getposition();				};_eventdispatcher->addEventListenerWithSceneGraPHPriority(Listener1,this);
以上是单点触摸事件的三个生命周期的定义:cctouchBegan、cctouchmoved、cctouchended,注意“=”号后带有“=”的中括号,带有“=”的,可以在方法中使用全局或者局部的变量,否则则不可在lambda中使用。最后一句则是将事件注册到相关的组件中,如Sprite或者Layer等。 总结

以上是内存溢出为你收集整理的cocos2dx 3.x事件监听全部内容,希望文章能够帮你解决cocos2dx 3.x事件监听所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1079856.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存