[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 ...
随机推荐
- JAVA 公众微信的开放源码项目管理合作伙伴招募的版本号
大家好: jeecg开源社区.现在正在进行"JAVA 开放源码的版本号项目微信公共账号"工作,有兴趣的朋友一起參与. 截止时间:20140510 採用技术: 1. JE ...
- windows-install-python-and-sphinx(*.rst file)
http://sphinx-doc.org/install.html#windows-install-python-and-sphinx
- 新手安装使用codeblocks
很多第一次使用codeblocks的新手总会遇到很多的问题,首先作为一名新手应该下一个完整版的codeblocks,下载地址链接: http://pan.baidu.com/s/1dDxKeD7 密码 ...
- hdu 4059 The Boss on Mars(纳入和排除)
http://acm.hdu.edu.cn/showproblem.php?pid=4059 定义S = 1^4 + 2^4 + 3^4+.....+n^4.如今减去与n互质的数的4次方.问共降低了多 ...
- POJ 3009-Curling 2.0(DFS)
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12158 Accepted: 5125 Desc ...
- <ASP.NET4 从入门到精通>学习笔记1
非常久没有写东西了,今日有时间,開始整理一下关于ASP.NET 4的学习笔记.提醒自己,也欢迎评论. 概述一共分为6个大的部分,兴许文章.将依据每一个部分进行整理,本读书笔记仅仅是整理关键点,对于啰嗦 ...
- JAVA基础实例(三)--排序
冒泡排序 是一种简单的排序算法.它反复地走訪过要排序的数列,一次比較两个元素.假设他们的顺序错误就把他们交换过来.走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕. 这个算法的 ...
- Ehcache BigMemory: 摆脱GC困扰(转)
问题 使用java开源项目经常需要调优jvm,以优化gc.对于gc,如果对象都是短时对象,那么jvm相对容易优化,假如碰上像solr使用自带java cache的项目,那么gc严重受限于cache,因 ...
- 新版本NDK环境结构(避Cygwin,超快)
曾经做Android的项目要用到NDK就必需要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配置编译器,环境变量... 麻烦到不想说 ...
- 动态生成Zip
动态生成Zip文档 通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成 ...