博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x-3.1 事件分发机制 (coco2d-x 学习笔记七)
阅读量:4563 次
发布时间:2019-06-08

本文共 4061 字,大约阅读时间需要 13 分钟。

触摸事件

Sprite* sp1 = Sprite::create("Images/t1.png");sp1->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));addChild(sp1, 10,1);auto mTouchListener = EventListenerTouchOneByOne::create();  //单点触摸事件mTouchListener->setSwallowTouches(true);   //true向下传递mTouchListener->onTouchBegan = [](Touch* touch, Event* event){  //匿名方式设置事件Sprite* target = static_cast
(event->getCurrentTarget());Point locationInNode = target->convertToNodeSpace(touch->getLocation());Size s = target->getContentSize();Rect normal = Rect(0, 0, s.width, s.height);if (normal.containsPoint(locationInNode)){ log("x=%f,y=%f", locationInNode.x, locationInNode.y); target->setOpacity(0x7F); //设置透明度 return true; //向下传递事件 } return false;};//绑定方式设置事件 其onTouchBegan函数的内容和匿名方式内容一样//listener1->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); mTouchListener->onTouchMoved = [](Touch* touch, Event* event){}; //触摸移动监听mTouchListener->onTouchEnded = [](Touch* touch, Event* event){}; //触摸监听结束/*_eventDispatcher是Node的属性,通过它管理当前节点(场景、层、精灵等)的全部事件的分发。但它本身是一个单例模式值的引用,在Node的构造函数中,通过Director::getInstance()->getEventDispatcher(); 获取,有了这个属性,就能方便的处理事件。*///将触摸事件交给事件分发器管理_eventDispatcher->addEventListenerWithSceneGraphPriority(mTouchListener, sp1);  /*ps:当再次使用 mTouchListener 的时候,须要使用clone()方法创建一个新的克隆。由于在使用addEventListenerWithSceneGraphPriority方法时,会对当前使用的事件监听器加入�一个已注冊的标记,这使得它不可以被加入�多次。另外,有一点很重要mTouchListener是跟Node绑定的,在Node的析构函数中会被移除。*/
 
 
 
 
 

键盘响应事件

auto mKeyboardListener = EventListenerKeyboard::create();  //键盘响应事件//键盘按下事件监听mKeyboardListener->onKeyPressed = [](EventKeyboard::KeyCode keyCode, Event* event){	log("keyCode=%d", keyCode);};//键盘释放事件监听mKeyboardListener->onKeyReleased = [](EventKeyboard::KeyCode keyCode, Event* event){	log("keyCode=%d", keyCode);if (EventKeyboard::KeyCode::KEY_ESCAPE == keyCode){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)	MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.", "Alert");	return;#endif	Director::getInstance()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)	exit(0);#endif	}};_eventDispatcher->addEventListenerWithSceneGraphPriority(mKeyboardListener, this);  //将键盘响应事件交给分发器来管理

鼠标响应事件

auto _mouseListener = EventListenerMouse::create();// 事件响应逻辑_mouseListener->onMouseMove = [=](Event *event){	EventMouse* e = (EventMouse*)event;	log("Key=%d", e->getMouseButton());};_mouseListener->onMouseUp = [=](Event *event){};_mouseListener->onMouseDown = [=](Event *event){};_mouseListener->onMouseScroll = [=](Event *event){};// 加入�到事件分发器_eventDispatcher->addEventListenerWithSceneGraphPriority(_mouseListener, this);

自己定义事件

auto mCustomListener = EventListenerCustom::create("my_custom_l", [](EventCustom* event){char* c = static_cast
(event->getUserData());log("%s", c);});/*将自自己定义事件交给分发器来管理,这样的方式是使用优先级别来设置SceneGraphPriority和FixedPriority差别在于前者是在析构函数中会被移除后者是须要手动移除*/_eventDispatcher->addEventListenerWithFixedPriority(mCustomListener, 1);EventCustom _event("my_custom_l");//char* cstr = "this is my custom listener!";static int count = 0;++count;char* buf;sprintf(buf, "this is my custom %d", count);_event.setUserData(buf);_eventDispatcher->dispatchEvent(&_event);  //手动触发自己定义事件
 
 
加速计事件
//启动加速硬件设备Device::setAccelerometerEnabled(true);auto mAcListener = EventListenerAcceleration::create([](Acceleration* acc, Event* event){#define FIX_POS(_pos, _min, _max) \if (_pos < _min)        \	_pos = _min;        \else if (_pos > _max)   \	_pos = _max;        \//log("x=%lf,y=%lf", acc->x, acc->y);	auto ballSize = sp1->getContentSize();	auto ptNow = sp1->getPosition();	ptNow.x += acc->x * 9.81f;	ptNow.y += acc->y * 9.81f;	FIX_POS(ptNow.x, (VisibleRect::left().x + ballSize.width / 2.0), (VisibleRect::right().x - ballSize.width / 2.0));	FIX_POS(ptNow.y, (VisibleRect::bottom().y + ballSize.height / 2.0), (VisibleRect::top().y - ballSize.height / 2.0));	sp1->setPosition(ptNow);});_eventDispatcher->addEventListenerWithSceneGraphPriority(mAcListener, this);

转载于:https://www.cnblogs.com/hrhguanli/p/4001358.html

你可能感兴趣的文章
Android - HelloWorld的Layout内容
查看>>
HDU 1143 Tri Tiling(递归)
查看>>
Vhost Architecture
查看>>
RTP协议分析
查看>>
怎么洗掉衣服上的水粉颜料、丙烯颜料、水彩颜料、油画颜料
查看>>
linux常用命令总结
查看>>
数值计算中的上溢和下溢
查看>>
Jenkins+SVN+Maven+shell 自动化部署实践
查看>>
看见一个程序员敲键盘的速度不快
查看>>
如何轻松培养孩子流利说英语
查看>>
Matlab 重命名
查看>>
js call
查看>>
1.7 单例模式
查看>>
.net三步配置错误页面,让你的站点远离不和谐的页面
查看>>
编程学习要讲究效率和经验
查看>>
关于hibernate中多对多关系
查看>>
InstallShield12豪华版破解版下载|InstallShield下载|软件打包工具
查看>>
魔兽RPG仿魔兽世界:基尔加丹的末日V1.0
查看>>
V8引擎实现标准ECMA-262(三)
查看>>
前端面试题集锦(一)
查看>>