cocos2d中的触摸监听
来源:互联网 发布:知米和百词斩哪个好 编辑:程序博客网 时间:2024/05/17 09:26
示例代码
- 新建场景类继承Scene。
- 重载init如下
bool ActionScene::init(){ // 1. super init first if ( !Layer::init() ) { return false; } touchEvent(this); return true;}
- 在init前写上全局监听函数(或另建测试类)
void touchEvent(ActionScene *scene){ //坐标标签 Label *label=Label::create(); label->setString("0,0"); label->setPosition(Point(50,200)); scene->addChild(label); //目标1 Sprite *sprite1=Sprite::create("sprite1.png"); sprite1->setPosition(Point(200,200)); scene->addChild(sprite1); //目标2 Sprite *sprite2=Sprite::create("sprite2.png"); sprite2->setPosition(Point(200,200)); scene->addChild(sprite2); //设置监听对象 auto lister=EventListenerTouchOneByOne::create(); //在回调列表中阻止继续传播 lister->setSwallowTouches(true); //触摸按下 lister->onTouchBegan=[](Touch *touch,Event *event){ auto target=static_cast<Sprite*>(event->getCurrentTarget()); Point pnow= Director::getInstance()->convertToGL(touch->getLocationInView()); if(target->getBoundingBox().containsPoint(pnow)){ target->setOpacity(100); return true; }else{ return false; } }; //触发抬起 lister->onTouchEnded=[](Touch *touch,Event *event){ auto target=static_cast<Sprite*>(event->getCurrentTarget()); Point pnow= Director::getInstance()->convertToGL(touch->getLocationInView()); target->setOpacity(255); }; //触摸按下移动 lister->onTouchMoved=[=](Touch *touch,Event *event){ auto target=static_cast<Sprite*>(event->getCurrentTarget()); Point pnow= Director::getInstance()->convertToGL(touch->getLocationInView()); char strshow[1000]; sprintf(strshow,"(%.2f,%.2f)",pnow.x,pnow.y); label->setString(strshow); }; auto eventDisP=Director::getInstance()->getEventDispatcher(); //绑定目标1 eventDisP->addEventListenerWithSceneGraphPriority(lister,sprite1); //绑定目标2 eventDisP->addEventListenerWithSceneGraphPriority(lister->clone(),sprite2);}
该函数实现的是,对某个精灵点击和松开会改变该精灵的透明度。以及在移动鼠标时显示坐标
注意处
有界面的框架(如MFC、WinFrom)中都有一套事件监听模块。CC大致与它们相同,略微不同的地方是写法(废话)以及回调类型。在上面定义了三个动作的响应函数(落下,移动,抬起)。在MFC中它们回调函数类型相同,看一下CC中的定义。
其中onTouchBegan的返回类型和其它动作的返回类型不同,为bool。
- 如果返回true,且其它动作有定义,则会触发执行
- 如果返回false,其它定义的动作不会触发
在本例中,如果点击的时候没有点在某个精灵上,那么移动鼠标不会得到鼠标当前的坐标,松开鼠标修改该精灵透明度的代码也不会执行。
*主要内容来自cocos2dx 3.0游戏开发之旅 Section 5.4
0 0
- cocos2d中的触摸监听
- cocos2d-x 事件分发机制 ——触摸事件监听
- cocos2d-x 事件分发机制 ——触摸事件监听
- cocos2d-x 事件分发机制 ——触摸事件监听
- cocos2d-x 3.0 事件分发机制 —触摸事件监听
- Cocos2d-js04_游戏触摸交互的监听和实现
- cocos2d-x中的多点触摸的问题
- cocos2d-x中的触摸事件详解
- Cocos2d触摸:单点触摸
- Cocos2d触摸:多点触摸
- 关于 Android ios cocos2d 中的广播监听
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x中 场景中的层触摸消息应用
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应
- 关于cocos2d-x中的多点触摸的问题
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应
- 一个简单实例理解cocos2d-x触摸事件中的坐标系
- Cocos2d-x从入门到精通第13课《Layer的触摸监听》
- 传播时延(propagation delay)与发送时延(transmission delay)
- SSH隧道原理
- HDU-ACM2117
- Activity 须知
- LR脚本调试的一些问题
- cocos2d中的触摸监听
- Ubuntu 16.04 安装 Notepadqq
- coco2d js 碰撞检测
- 码农小汪-Spring MVC 处理器拦截器详解
- 我对开源C++网络库简单应用总结
- Cocos2d-JS切换场景与切换特效
- 【代码】.NET生成动态验证码
- 树状数组求逆序对
- 利用SSH隧道技术实现跳板机SHELL登陆以及SFTP到内网服务器