一、基本使用

1、首先,声明一个监听器

有两种,EventListenerTouchOneByOne 和 EventListenerTouchAllAtOnce,前者是单点触控。后者是多点触控。后者我没怎么用过。不是非常了解。所以这里主要讲单点触控。

2、实现触碰监听各种事件的相应回调方法

这里也有两种

1)CC_CALLBACK_2 回调机制

2)   直接用Lambda 表达式

3、注冊监听

演示样例

1) 用CC_CALLBACK_2 回调机制

    //声明监听
auto listener = EventListenerTouchOneByOne::create(); //实现监听回调
listener->onTouchBegan = CC_CALLBACK_2(Test::onTouchBegan, this); listener->onTouchMoved = CC_CALLBACK_2(Test::onTouchMoved, this); listener->onTouchEnded = CC_CALLBACK_2(Test::onTouchEnded, this); //注冊监听
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

三个回调方法,这里没有写详细的内容

bool Test::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event)
{
return true;
} void Test::onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *event)
{ } void Test::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *event)
{ }

2) 用Lambda 表达式

    //声明监听
auto listener = EventListenerTouchOneByOne::create(); //实现监听回调
listener->onTouchBegan = [](Touch * touch, Event *event){ return true;
};
listener->onTouchMoved = [](Touch * touch, Event *event){ }; listener->onTouchEnded = [](Touch * touch, Event *event){ }; //注冊监听
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

假设不是要反复多次使用的回调方法的话。用Lambda是非常不错的选择,直观,能省不少事。只是Lambda事实上也能多次调用的。这个暂且不说。

二、拖动精灵移动

这个我们要做下面步骤

1、获取触碰坐标

2、推断这个坐标是否包括在精灵里

3、获取鼠标(即我们手指移动)移动的差值

4、精灵移动对应的距离和方向

    listener->onTouchMoved = [=](Touch * touch, Event *event){

        //获取触碰坐标----这里getLocation()这种方法会自己主动将坐标转换成openGL坐标。不用我们手动转换
auto touchPos = touch->getLocation(); //推断是否在精灵里
if (sp->getBoundingBox().containsPoint(touchPos)) { //获取差值
auto movePos = touch->getDelta(); //精灵移动
sp->setPosition(sp->getPosition() + movePos);
}
};

这里我要说一下getDelta()这种方法。曾经获取差值是要我们自己计算的,通过getPreviousLocation()这种方法获取上次的坐标,然后与如今的坐标相减来算出。如今已经有算差值的方法了。还是挺贴心的- -。

哦对了。这里这个Lambda表达式须要在[ ]里面加 = 号,表示值传递。这像人才的外部引用和修改变量。关于本可以去看看Lambda要使用

版权声明:本文博主原创文章。博客,未经同意不得转载。

[cocos2d-x 3.0] 触摸显示器的更多相关文章

  1. 高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)

    Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering ...

  2. Cocos2d-x3.0触摸

    cocos2d-x 3.0開始採用C++11,并開始脱离OC风格,在触摸处理上也作出了改变 C++11带来了Lambda表达式(匿名函数),它将简化程序编写,可使代码更清晰易懂 在旧2.x版本号的触摸 ...

  3. [iOS UI进阶 - 3.0] 触摸事件的基本处理

    A.需要掌握和练习的 1.介绍事件类型2.通过按钮的事件处理引出view的事件处理3.响应者对象 --> UIResponder --> UIView4.view的拖拽* 实现触摸方法,打 ...

  4. cocos2dx 3.0 触摸机制

    在cocos2dx 3.0版本号中,废弃了以往2.x版本号的写法,我们先来看一下Layer.h中的一段代码 /* Callback function should not be deprecated, ...

  5. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 回到Xcode中,新建一个EndLayer类,继承于CCNode ...

  6. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(四)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在打开MainScene.m文件,首先设置实例变量: @imp ...

  7. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先说一下为什么要转换,这是为了后面的A*寻路算法做准备.由于在 ...

  8. 最新版本号cocos2d­2.0­x­2.0.2使用新资源载入策略!不再沿用-hd、-

     前段时间cocos2dx更新了最新版本号cocos2d­2.0­x­2.0.2.也从这个版本号開始对于资源载入与管理都改变了策略. 在之前的载入方式都是通过沿用与cocos2d-iphone一样 ...

  9. Cocos2d-x3.0 触摸事件

    TouchableSpriteTest auto winSize = Director::getInstance()->getWinSize(); Point origin = Director ...

随机推荐

  1. Java采用HttpClient对于Web登录

    http://e.neusoft.edu.cn/nav_login 模拟浏览器登录该网站上方.登录server基于验证码.refer和cookie保护,此代码html档. import java.io ...

  2. 如何插上U盘 自动复制内容

    U盘插入自动复制,有效对付那些不肯给PPT的老师,还有一定几率拿到期末考试卷子···有图有真相!业界良心的好东西!!现在看还来得及!!! 代码优化了一下,把不是很重要的都删掉了,这次使用时看不出任何现 ...

  3. Linux 于 shell 变数 $#,$@,$0,$1,$2 含义解释:

    变量说明: $$ Shell自己PID(ProcessID) $! Shell背景上次执行Process的PID $? 命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 全部參数 ...

  4. android中怎么把自己须要的app启动图标集中到一个弹出框中

    先看效果图 这个是我们自己的apk点击之后的效果 下边是布局文件 activity_main.xml主布局文件 <LinearLayout xmlns:android="http:// ...

  5. 使用jprobe建设镜面层叠的原则和见解

    忽然想起的回忆,那是2007上周五在冬季,我看我的老湿调试Linux堆IP层,只看到他改变路由查找的逻辑,然后直接make install上的立竿见影的效果有点,我只知道,,这种逻辑必须再次更改编译内 ...

  6. Delete和Truncate的区别

    原文:Delete和Truncate的区别 一般对于没有用的数据,都会经行删除,而删除通常使用的是DELETE和TRUNCATE命令.对于有条件地删除,基本上就会使用DELETE,当然还是没有绝对,用 ...

  7. SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)

    原文:SQL Server中的TempDB管理--TempDB基本知识(为什么需要版本存储区) 参考资料来自: http://blogs.msdn.com/b/sqlserverstorageengi ...

  8. 初步swift语言学习笔记8(保留了很多OC实现)

    笔者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/32715833 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  9. gradle--java入门(转)

    7.3.3 项目之间的依赖性 您可以添加项目之间的依赖性在相同的构建,所以,例如,这个一个项目的JAR文件是用来编译另一个项目,在api构建文件我们将添加一个依赖JAR产生的共享项目.由于这种依赖性, ...

  10. css Tab选项卡1

    利用   锚点原理 以及overflow:hiden 结合,实现纯  css  tab 方式 兼容ie6 + 适合单个tab   不需要js          注意点  红色方框的   a 对应a   ...