触摸事件
2016-03-03 19:36
549 查看
一:单点触摸事件
1、分四个阶段(触摸开始、触摸移动、触摸结束、触摸取消)2、重写以下四个函数并实现方法:
virtual bool onTouchBegan(Touch *touch, Event *unused_event); virtual void onTouchMoved(Touch *touch, Event *unused_event); virtual void onTouchEnded(Touch *touch, Event *unused_event); virtual void onTouchCancelled(Touch *touch, Event *unused_event);
3、添加监听者:
auto listener=EventListenerTouchOneByOne::create(); listener->onTouchBegan=CC_CALLBACK_2(HelloWorld::onTouchBegan, this); listener->onTouchMoved=CC_CALLBACK_2(HelloWorld::onTouchMoved, this); listener->onTouchEnded=CC_CALLBACK_2(HelloWorld::onTouchEnded, this); listener->onTouchCancelled=CC_CALLBACK_2(HelloWorld::onTouchCancelled, this);
4、将监听者添加到事件触摸分发器中:
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
5、在相应的实现方法中实现功能。
在onEnter( )函数中制定触摸优先级:
Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(listener, -128);
在onExit( )函数中释放注册
Director::getInstance()->getEventDispatcher()->removeEventListenersForTarget(this);
触摸吞噬(可以吞噬掉以后的触摸事件)
listener->setSwallowTouches(true);
二:多点触摸事件
1、首先要开启多点触摸,在ios文件夹下AppController.mm文件中找到[eaglView setMultipleTouchEnabled:NO];
将NO改为YES
[eaglView setMultipleTouchEnabled:YES];
2、重写以下四个函数并实现方法:
virtual void onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event); virtual void onTouchesMoved(const std::vector<Touch*>& touches, Event *unused_event); virtual void onTouchesEnded(const std::vector<Touch*>& touches, Event *unused_event); virtual void onTouchesCancelled(const std::vector<Touch*>&touches, Event *unused_event);
3、添加监听者:
auto listener1=EventListenerTouchAllAtOnce::create(); listener1->onTouchesBegan=CC_CALLBACK_2(HelloWorld::onTouchesBegan, this); listener1->onTouchesMoved=CC_CALLBACK_2(HelloWorld::onTouchesMoved,this); listener1->onTouchesEnded=CC_CALLBACK_2(HelloWorld::onTouchesEnded, this); listener1->onTouchesCancelled=CC_CALLBACK_2(HelloWorld::onTouchesCancelled,this);
4、将监听者添加到事件触摸分发器中:
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener1, this);
5、在相应的实现方法中实现功能。
三:单点触摸与多点触摸的区别
多点触摸默认是不开启的,需要手动开启;多点触摸一定会接受这次触摸事件,单点触摸可以选择是否接受(根据onTouchBegan函数返回的布尔值决定);
单点触摸可以有吞噬,而多点触摸不能有吞噬;
单点触摸的优先级永远比多点触摸的高。
相关文章推荐
- Cocos2d-x中背景音乐和音效使用实例
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例
- Cocos2d-x UI开发之文本类使用实例
- Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法
- Cocos2d-x UI开发之菜单类使用实例
- Cocos2d-x UI开发之CCControlButton控件类实例
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
- Cocos2d-x学习笔记之CCLayerColor层的使用实例
- Cocos2d-x Schedule定时器的使用实例
- Cocos2d-x中使用CCScrollView来实现关卡选择实例
- Cocos2d-x中CCEditBox文本输入框的使用实例
- cocos2d-x学习笔记之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex场景层介绍
- Cocos2d-x UI开发之CCControlSlider控件类使用实例
- Cocos2d-x学习笔记之开发环境搭建
- Cocos2d-x学习笔记之Hello World!
- 使用C++进行Cocos2d-x游戏开发入门过程中的要点解析
- Cocos2d-x的内存管理总结
- Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决