COCOS2DX3.0的3种触摸响应机制
来源:互联网 发布:淘宝开店描述小铺语句 编辑:程序博客网 时间:2024/05/17 08:54
第一种是采用函数回调,主要是用于MenuItem
[cpp] view plaincopy
- // a selector callback
- void menuCloseCallback(Object* pSender);
- auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",
- CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
- void HelloWorld::menuCloseCallback(Object* pSender)
- {
- Director::getInstance()->end();
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- exit(0);
- #endif
- }
从上面的代码也可以看得到3.0的一些改变
用CC_CALLBACK_x代替了 按钮的 menu_selector(),update的 schedule_selector 回调接口,其中最后一个x代表着回调函数的参数有几个,0表示0个,1表示1个,2表示2个,上面的例子是1个参数,所以用CC_CALLBACK_1
第二种方法我也不是很明白,TouchEvent响应
这是新加入的响应方式。它主要是使用在UIWidget上的。可以将其看做是函数回调的一个扩展,为更多的响应处理提供可能。使用方法大致是:
[cpp] view plaincopy
- //声明
- void touchButton(Object* object,TouchEventType type);
- //挂接到控件上
- uiButton->addTouchEventListener(this,toucheventselector(HelloWorld::touchButton));
- //实现
- void HelloWorld::touchButton(Object* object,TouchEventType type)
- {
- LabelTTF* label;
- switch (type)
- {
- case TouchEventType::TOUCH_EVENT_BEGAN:
- label = static_cast(getChildByTag(11));
- label->setString("按下按钮");
- break;
- case TouchEventType::TOUCH_EVENT_MOVED:
- label = static_cast(getChildByTag(11));
- label->setString("按下按钮移动");
- break;
- case TouchEventType::TOUCH_EVENT_ENDED:
- label = static_cast(getChildByTag(11));
- label->setString("放开按钮");
- break;
- case TouchEventType::TOUCH_EVENT_CANCELED:
- label = static_cast(getChildByTag(11));
- label->setString("取消点击");
- break;
- default:
- break;
- }
- }
因为所有的UIWidget都要添加到UILayer上,而UILayer通常都会在最上层,所以可以“基本上”认为这种使用方式会优先于其他方式处理点击消息。因为UILayer也会有层级的改变,比如它和MenuItem之间的关系。所以说“基本上”。
第三种 触摸监听绑定
我觉得这种方法相当方便,不仅可以绑定在精灵上,还可以绑定在层上,触摸函数也可以用lambda来写。下面是方法
[cpp] view plaincopy
- auto listener1 = EventListenerTouchOneByOne::create();//创建一个触摸监听
- listener1->setSwallowTouches(true);//设置是否想下传递触摸
- Rect rect = Rect(qipanPoint.x,qipanPoint.y
- ,qipanSize.width,qipanSize.height);
- //3.0 后可以直接在touchBegan后添加它的实现代码,而不用特意去写一个touchBegan的函数
- listener1->onTouchBegan = [rect,this](Touch* touch, Event* event){ //[]中间的是传入的参数
- auto target = static_cast(event->getCurrentTarget());//获取的当前触摸的目标
- Point locationInNode = target->convertToNodeSpace(touch->getLocation());
- Size s = target->getContentSize();
- if (rect.containsPoint(locationInNode))//判断触摸点是否在目标的范围内
- {"white-space:pre"> //以下是我自定义的一些操作
- //创建锁定精灵
- auto lockSprite = Sprite::create("lock.png");
- lockSprite->setPosition(GetQiziPoint(locationInNode,rect));
- lockSprite->setTag(99);
- this->addChild(lockSprite);
- return true;
- }else
- return false;
- };
- //拖动精灵移动
- listener1->onTouchMoved = [rect,this](Touch* touch, Event* event){
- auto target = static_cast(event->getCurrentTarget());//获取的当前触摸的目标
- Point locationInNode = target->convertToNodeSpace(touch->getLocation());
- Size s = target->getContentSize();
- if (rect.containsPoint(locationInNode))//判断触摸点是否在目标的范围内
- {
- //锁定精灵移动
- Sprite *lockSprite = (Sprite*)this->getChildByTag(99);
- lockSprite->setPosition(GetQiziPoint(locationInNode,rect));
- }
- };
- listener1->onTouchEnded = [=](Touch* touch, Event* event){ // =在c++11里面代表这个lambda表达式中能使用外面的变量
- this->removeChildByTag(99);//移除锁定精灵
- };
- //将触摸监听添加到eventDispacher中去
- _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1 ,layer);
0 0
- COCOS2DX3.0的3种触摸响应机制
- COCOS2DX3.0的3种触摸响应机制
- COCOS2DX3.0的3种触摸响应机制
- COCOS2DX3.0的3种触摸响应机制
- Cocos2dx3.0触摸机制
- cocos2dx3.0触摸机制
- Cocos2dx3.0过渡篇(三)触摸机制Cocos2dx3.0过渡篇(三)触摸机制
- 关于cocos2dx3.X版本的触摸响应的…
- cocos2dx3.0 触摸事件
- cocos2dx3.0的触摸优先级和触摸屏蔽问题
- cocos2dx3.0的触摸优先级和触摸屏蔽问题
- UIScrollView 响应触摸事件的机制
- cocos2dx3.x使用cocostudio触摸事件不响应的奇葩问题
- android触摸响应传递机制
- quick中触摸事件响应机制
- cocos2dx3.4触摸
- cocos2d-x的触摸响应
- 响应触摸事件的方法
- MAC 安装更新 ANT
- 明白什么是“五险一金”
- 项目39.3-1输入一个正整数,输出它的反序数(反序数,即将其所有位的数字反过来。例如,123是321的反序数)
- 千万别在最能吃苦的年纪选择安逸
- iOS 9 适配出现的问题
- COCOS2DX3.0的3种触摸响应机制
- 误修改/etc目录下所有文件权限导致无法远程访问
- Oracle 监听(Listener) 中 services 说明
- word-break:break-all、word-break:break-work和work-wrap:break-work的区别
- UGUI -Custom Font
- 高性能网络编程(一)----accept建立连接
- markdown 简明语法
- Using Cortex-M3 and Cortex-M4 Fault Exceptions
- [Merge Sort] Merge Two Sorted Lists