第六节:事件处理
2015-06-11 13:43
288 查看
单点触屏事件:
//先创建一个单点触屏监听器 auto listener = EventListenerTouchOneByOne::create(); //注册监听器的回调方法,分别回调本节点的三个方法 listener->onTouchBegan = CC_CALLBACK_2(EventScene::onTouchBegan, this); listener->onTouchEnded = CC_CALLBACK_2(EventScene::onTouchEnded,this); listener->onTouchMoved = CC_CALLBACK_2(EventScene::onTouchMoved, this); //注册监听器 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
//手势开始的时候执行 bool EventScene::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *unused_event) { //获取屏幕触控点 auto p = touch->getLocationInView(); //把点的转换为GL坐标 p = Director::getInstance()->convertToGL(p); //在控制台输出点的坐标 CCLOG("[%f,%f]",p.x,p.y); //如果返回false,就不再往下执行,后面的onTouchMoved和onTouchEnded就不会再执行 return true; } //滑动手势的时候执行 void EventScene::onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *unused_event) { CCLOG("执行移动操作"); } //手势结束的时候执行 void EventScene::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *unused_event) { CCLOG("手势结束了"); }
多点触屏事件:
//注册监听器的回调方法,分别回调本节点的三个方法 //与单点触控是不一样的方法 auto all_listener = EventListenerTouchAllAtOnce::create(); all_listener->onTouchesBegan = CC_CALLBACK_2(EventScene::onTouchesBegan, this); all_listener->onTouchesMoved = CC_CALLBACK_2(EventScene::onTouchesMoved, this); all_listener->onTouchesEnded = CC_CALLBACK_2(EventScene::onTouchesEnded, this); //注册监听器 _eventDispatcher->addEventListenerWithSceneGraphPriority(all_listener, this);
void EventScene::onTouchesBegan(const std::vector<Touch *> &touches, cocos2d::Event *unused_event) { //从触控的多点中,取出一个触控点 auto t = touches[0]; //获取屏幕触控点 auto p = t->getLocationInView(); //把点的转换为GL坐标 p = Director::getInstance()->convertToGL(p); //在控制台输出点的坐标 CCLOG("[%f,%f]",p.x,p.y); } void EventScene::onTouchesMoved(const std::vector<Touch *> &touches, cocos2d::Event *unused_event) { CCLOG("多点触控执行移动操作"); } void EventScene::onTouchesEnded(const std::vector<Touch *> &touches, cocos2d::Event *unused_event) { CCLOG("多点触控手势结束了"); }
鼠标事件:
auto mouse_listener = EventListenerMouse::create(); mouse_listener->onMouseUp = CC_CALLBACK_1(EventScene::onMouseUp, this); mouse_listener->onMouseDown = CC_CALLBACK_1(EventScene::onMouseDown, this); mouse_listener->onMouseScroll = CC_CALLBACK_1(EventScene::onMouseScroll, this); mouse_listener->onMouseMove = CC_CALLBACK_1(EventScene::onMouseMove, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(mouse_listener, this);
void EventScene::onMouseDown(cocos2d::Event *e) { EventMouse* em = (EventMouse*)e; int b = em->getMouseButton(); CCLOG("你点击的是鼠标的%d",b); } void EventScene::onMouseMove(cocos2d::Event *e) { EventMouse* em = (EventMouse*)e; CCLOG("鼠标移动的坐标[%f,%f]",em->getCursorX(),em->getCursorY()); } void EventScene::onMouseScroll(cocos2d::Event *e) { EventMouse* em = (EventMouse*)e; CCLOG("滑轮滚动的坐标[%f,%f]",em->getScrollX(),em->getScrollY()); } void EventScene::onMouseUp(cocos2d::Event *e) { CCLOG("鼠标抬起"); }
键盘事件:
auto keyboard_listener = EventListenerKeyboard::create(); keyboard_listener->onKeyReleased = CC_CALLBACK_2(EventScene::onKeyReleased, this); keyboard_listener->onKeyPressed = CC_CALLBACK_2(EventScene::onKeyPressed, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(keyboard_listener, this);
void EventScene::onKeyPressed(EventKeyboard::KeyCode keyCode, cocos2d::Event *event) { switch (keyCode) { case cocos2d::EventKeyboard::KeyCode::KEY_UP_ARROW: CCLOG("UP..."); break; case cocos2d::EventKeyboard::KeyCode::KEY_DOWN_ARROW: CCLOG("DOWN..."); break; case cocos2d::EventKeyboard::KeyCode::KEY_RIGHT_ARROW: CCLOG("RIGHT..."); break; case cocos2d::EventKeyboard::KeyCode::KEY_LEFT_ARROW: CCLOG("LEFT..."); break; } } void EventScene::onKeyReleased(EventKeyboard::KeyCode keyCode, cocos2d::Event *event) { }
加速度事件:
//首先,要打开加速度传感器 Device::setAccelerometerEnabled(true); //创建一个加速度传感器监听器,参数是一个回调 auto acceler_listener = EventListenerAcceleration::create(CC_CALLBACK_2(EventScene::onAcceleration, this)); //注册监听器 _eventDispatcher->addEventListenerWithSceneGraphPriority(acceler_listener,this);
void EventScene::onAcceleration(cocos2d::Acceleration *acc, cocos2d::Event *unused_event) { //分别获取x,y,z方向上的加速度 float x = acc->x; float y = acc->y; float z = acc->z; }
相关文章推荐
- JPA 注解
- 微信公众平台分享
- Android快速开发之appBase——(5).BasePresenter的使用
- EasyUI1.11.1 出现错误: TypeError: _2ad is undefined if (_2ad.onClose) {
- 7张图告诉你成功者与失败者的行为差别
- Qt的学习
- JQUERY动态绘制表格,实现动态添加一行,删除一行
- 各大浏览器 CSS3 和 HTML5 兼容速查表
- Flarum 用到的前端 javascript 库
- android在线更新镜像服务器
- 为什么科技巨头们纷纷更换 Logo?
- opencv中的一些陷阱 坑死我了~~~~(>_<)~~~~
- hdu2852 KiKi's K-Number
- MM物料账在制品承担差异功能及配置
- 蓝的成长记——追逐DBA(17):是分享,还是消费,在后IOE时代学会成长
- selenium打开firefox问题
- C# ZIP 压缩解压操作
- HackerRank-Data Structure-linked list
- 【Android笔记】Unable to execute dex: Multiple dex files define 解决方法
- uva 10534 Wavio Sequence LIS