[cocos2d-x 3.0] 触摸显示器
一、基本使用
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] 触摸显示器的更多相关文章
- 高屋建瓴 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 ...
- Cocos2d-x3.0触摸
cocos2d-x 3.0開始採用C++11,并開始脱离OC风格,在触摸处理上也作出了改变 C++11带来了Lambda表达式(匿名函数),它将简化程序编写,可使代码更清晰易懂 在旧2.x版本号的触摸 ...
- [iOS UI进阶 - 3.0] 触摸事件的基本处理
A.需要掌握和练习的 1.介绍事件类型2.通过按钮的事件处理引出view的事件处理3.响应者对象 --> UIResponder --> UIView4.view的拖拽* 实现触摸方法,打 ...
- cocos2dx 3.0 触摸机制
在cocos2dx 3.0版本号中,废弃了以往2.x版本号的写法,我们先来看一下Layer.h中的一段代码 /* Callback function should not be deprecated, ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 回到Xcode中,新建一个EndLayer类,继承于CCNode ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(四)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在打开MainScene.m文件,首先设置实例变量: @imp ...
- Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先说一下为什么要转换,这是为了后面的A*寻路算法做准备.由于在 ...
- 最新版本号cocos2d­2.0­x­2.0.2使用新资源载入策略!不再沿用-hd、-
前段时间cocos2dx更新了最新版本号cocos2d2.0x2.0.2.也从这个版本号開始对于资源载入与管理都改变了策略. 在之前的载入方式都是通过沿用与cocos2d-iphone一样 ...
- Cocos2d-x3.0 触摸事件
TouchableSpriteTest auto winSize = Director::getInstance()->getWinSize(); Point origin = Director ...
随机推荐
- chrome使用技巧(转)good
阅读目录 写在前面 快速切换文件 在源代码中搜索 在源代码中快速跳转到指定的行 使用多个插入符进行选择 设备模式 设备传感仿真 格式化凌乱的js源码 颜色选择器 改变颜色格式 强制改变元素状态(方便查 ...
- 【iOS】UIViewController生命周期
UIViewController有2周期: 在UIViewController中,View存在两个循环:载入循环和卸载循环. 载入循环 1>程序请求controller的view. 2>假 ...
- SDUT 2894-C(最短spfa)
C Time Limit: 7000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 给出一个带权无向图.包括n个点,m条边.求出s,e的最短路.保证最短路存在 ...
- 【Android进阶】ZXing android 错误(Could not find class 'com.google.zxing.ResultPoint)
解决方法: 1.右键工程Build path, java build path,选择libraries 在右边的按钮中点击"Add Library" 选择"User li ...
- PHP redis操作类 个人总结
<pre name="code" class="php"><span style="font-size:18px;"> ...
- 完美世界3D格斗手游[格斗宝贝]今日公測
狗刨学习网报道 / 经过近两年井喷式的发展,国内手游市场洗牌的信号愈加强烈.用户体验的提升.以及对产品核心品质的要求.促进了手游的精品化.而白热化的市场竞争,也催生了各大厂商在细分市场的抢滩.当中.更 ...
- Chapter 3 Protecting the Data(3):创建和使用数据库角色
原版的:http://blog.csdn.net/dba_huangzj/article/details/39639365.专题文件夹:http://blog.csdn.net/dba_huangzj ...
- windows rt 扫描二维码
项目中使用的是ZXing.net,应用商店程序.使用到的dll是ZXing.winmd. 大致思路为,使用MediaCapture捕获图片.获取到CapturePhotoToStreamAsync流, ...
- R0-R37它是Arm 寄存器,那是,CPU内部。和GPIO注册所有外设。换句话说,要是arm的cpu,它包含了其他芯片公司将有R0-R37,和GPIO寄存器只有一个特定的芯片。
R0-R37它是Arm 寄存器.那是,CPU内部.和GPIO注册所有外设. 换句话说,要是arm的cpu,它包含了其他芯片公司将有R0-R37,和GPIO有. 版权声明:本文博主原创文章.博客,未经同 ...
- git-push(1) Manual Page
git-push(1) Manual Page NAME git-push - Update remote refs along with associated objects SYNOPSIS gi ...