5.触摸touch,单点触摸,多点触摸,触摸优先和触摸事件的吞噬
1 触摸
Coco2dx默认只有CCLayer及其派生类才有触摸的功能。
2 单点触摸
打开触摸开关和触摸方式
setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);
Cocos2dx 对触摸分三布来处理。分是是点触,移动,离开。或是中间被打断。其功能皆有相应的virtual 函数进行override 的。
virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent); |
virtual void ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent); |
virtual void ccTouchEnded(CCTouch *pTouch,CCEVENT *pEvent); |
virtual void ccTouchCancelled(CCTouch *pTouch,CCEvent *pEvent); |
获取点击的坐标点
CCPoint pt = pTouch->getLocation(); CCLog(“x=%f y=%f”,pt.x,pt.y); |
理解getDelta();
ccTouchBegan start x = 67.309761 y = 180.989975 ccTouchMoved delta x = 1.013191, y = 0.000000 ccTouchMoved delta x = 5.977837, y = 0.000000 ccTouchMoved delta x = 3.985229, y = 0.000000 ccTouchMoved delta x = 1.013184, y = 0.000000 ccTouchMoved delta x = 1.992615, y = 0.000000 ccTouchMoved ................................... ................................... delta x = 1.013184, y = 0.000000 ccTouchMoved delta x = 0.979431, y = 0.000000 ccTouchMoved delta x = 1.992615, y = 0.000000 ccTouchMoved delta x = 3.005798, y = 0.000000 ccTouchMoved delta x = 3.005798, y = 0.000000 ccTouchMoved delta x = 2.972015, y = 0.000000 ccTouchMoved delta x = 1.013214, y = 0.000000 ccTouchMoved delta x = 3.005798, y = 0.000000 ccTouchMoved delta x = 0.979431, y = 0.000000 ccTouchEnded |
3 多点触摸
打开触摸开关,系统默认为单点触摸。
setTouchEnabled(true); |
cocos2dx对触摸分三部来处理。分别是点触,移动,离开。或是中间被打断。其功能皆有相应的virtual函数进行override的。
virtual bool ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent); virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent); |
获取点击的坐标点。
4 案例(打飞机)
Touch.h |
#ifndef __TOUCH_H__ #define __TOUCH_H__ #include "cocos2d.h" USING_NS_CC; class Touch :public CCLayerColor { public: static CCScene * scene(); CREATE_FUNC(Touch); bool init(); enum MyEnum { BN747 }; bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent); }; #endif |
Touch.cpp |
#include "Touch.h" #include "AppMacros.h" CCScene *Touch::scene() { CCScene * scene = CCScene::create(); Touch * layer = Touch::create(); scene->addChild(layer); return scene; } bool Touch::init() { CCLayerColor::initWithColor(ccc4(255, 255, 255, 255)); setTouchEnabled(true); setTouchMode(kCCTouchesOneByOne); CCSprite * plane = CCSprite::create("hero1.png"); plane->setPosition(ccp(100, 100)); addChild(plane); plane->setTag(BN747); return true; } bool Touch::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { CCSprite * plane = (CCSprite *)getChildByTag(BN747); CCPoint pt = pTouch->getLocation(); if (plane->boundingBox().containsPoint(pt)) { CCLOG("touched"); return true; } //决定消息是否往下传递 return false; } void Touch::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) { CCSprite * plane = (CCSprite *)getChildByTag(BN747); CCPoint pt = plane->getPosition() + pTouch->getDelta(); if (pt.x > plane->getContentSize().width / 2 && pt.x < winSize.width - plane->getContentSize().width / 2 && pt.y > plane->getContentSize().height / 2 && pt.y < winSize.height - plane->getContentSize().height / 2) { plane->setPosition(pt); } CCLog("ccTouchMoved x = %g y = %g", pt.x, pt.y); } void Touch::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { CCLog("ccTouchEnded"); } void Touch::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent) { CCLog("ccTouchCancelled"); } |
运行结果: |
5.触摸touch,单点触摸,多点触摸,触摸优先和触摸事件的吞噬相关推荐
- 多点触摸与单点触摸接口主要区别【转】
转自:http://blog.csdn.net/eleven_yy/article/details/7723079 上发单点触摸事件 input_report_key(input,ABS_MT_TRA ...
- 正点原子Linux 触摸芯片改成GT911后的驱动修改(单点和多点触摸)
目录 单点触摸 设备树修改 编译设备树和驱动模块并运行 运行测试 多点触摸 野火的Linux的触摸芯片就是用的GT911,如果用GT911替换原来正点原子的FT5x06或者GT9147,需要做一些修改 ...
- 移动端js触摸touch详解(附带案例源码)
移动端触摸滑动原理详解案例,实现过程通过添加DOM标签的触摸事件监听,并计算触摸距离,通过距离坐标计算触摸角度,最后通过触摸角度去判断往哪个方向触摸的. 触摸的事件列表 触摸的4个事件: touchs ...
- linux触摸板设置密码程序6,Linux下Synaptics笔记本触摸板的配置
笔记本上Synaptics的触摸板比较常见,但关于其配置的资料目前来看比较混乱,主要原因是这两年来桌面环境的变化比较大,搜索出来的结果是不同时期的人的解决办法,往往五花八门让人无所适从,如果想完全控制 ...
- linux键盘触摸板失灵,linux 中屏幕合上后触摸板无法使用
屏幕合上后触摸板无法使用 这是一个遗留问题,从两年前开始就一直存在.过去由于对驱动不熟悉,没有考虑驱动的问题. 现在首先判断触摸板使用的驱动是哪一个.搜集资料发现,当前系统中的触摸板驱动为 psmou ...
- win7触摸板怎么关闭_触摸板开关怎么使用 如何锁定简式触摸板开关
现如今我们在生活条件上的不断提高,家家户户都具备台式电脑或者是笔记本等高科技电子产品,那么笔记本的触控板其实就相当于是鼠标的功能.但是使用起来并没有鼠标方便,有时打字的时候还容易产生误操作,许多网友都 ...
- Unity中单点和多点触控
Input.touchCount获取当前的触摸点数目,若为1则是单点触控,大于1则是多点触控 点击事件用:Input.GetTouch(num).phase== TouchPhase.Began这样的 ...
- 【unity3D】单点和多点触控
总结: Input.touchCount获取当前的触摸点数目,若为1则是单点触控,大于1则是多点触控 点击事件用:Input.GetTouch(num).phase == TouchPhase.Beg ...
- Android4.0 TP多点变单点,单点变多点问题
由于某些IC的特性,当为多点时,默认靠近Y轴的点ID为ID0,这样就会造成当多点变单点时,单点失效,单点变多点时,会变成单点的划线动作.解决这个BUG的方法: 当按在触摸屏上的point数与上次的po ...
最新文章
- 【HDU】5256 系列转换(上涨时间最长的序列修饰)
- 图像分类简单介绍-转
- java压缩----使用ANT JDK压缩---只压缩选中目录的指定文件夹
- click js自动点击 vue_vue.js2.0点击获取自己的属性和jquery方法
- Linux内核源代码分析-目录
- 动环监控整体方案,动环监控系统施工方案
- python提取pdf表格数据 无边框_Python使用Tabula提取PDF表格数据
- poj 1838 Banana
- 解决MySQL登录1045错误
- Java Swing实现仿微信PC客户端程序 SOCKET 即时通信系统
- T00ls Lpk Sethc 首创lpk劫持方式粘滞键后门,体积超小!
- 病毒RNA提取:EpiQuik 病毒RNA提取纯化试剂盒方案
- 2022年Web 前端怎样入门?最新Web前端入门的学习路线
- 如何获取广告服务流量变现数据,助力广告效果分析?
- 如何压缩PDF文件?教你两种压缩文件的方法
- 获取svg和svg内容的方法
- 学习 Go 语言 0x04:《Go 语言之旅》中切片的练习题代码
- vue2 + elementui 日期时间选择器 禁止选择当前时间之前的日期及时间,并添加相应校验规则
- C#轻松打造vista透明窗口(xp系统无任何vista主题)(汤贞营作品)
- 微信管制下,如何让你的H5诱导分享更高效?
热门文章
- C++学习笔记4[循环语句]
- 一篇带你搞透回溯算法
- pyqt5讲解9:时间模块timer和网页交互
- VTK:不透明度用法实战
- VTK:vtkTupleInterpolator 插值用法实战
- wxWidgets:wxComboBox类用法
- boost::python模块实现使用原始指针访问数据的示例
- boost::process::start_dir相关的测试程序
- boost::math::quadrature::gauss_kronrod用法的测试程序
- boost::boost::maximum_adjacency_search用法的测试程序