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 ...
最新文章
- 网络服务-RSYNC
- java基础学习总结一(java语言发展历史、jdk的下载安装以及配置环境变量)
- [置顶] 程序员的奋斗史(十五)——谈性格
- 打印session cookie
- pythonpandas设置索引_python – pandas:使用(row,col)索引设置值
- 【教程】怎么同时同时ping1000个IP地址?
- broker可以禁用吗 time_很多人会问Win8.1系统Runtime Broker是什么进程?可以禁用吗?带着这两个问题...
- 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
- NodeJS中resolve添加地址无效
- MSP430F5529 DriverLib 库函数I2C驱动OLED屏幕
- java正则匹配英文句号_Scala 正则表达式 0411
- I2C总线时序模拟(二)-加深理解总线协议
- hdfs 指令_Hadoop Shell命令
- VMware要不要装在固态SSD上,虚拟机系统文件要不要放固态SSD上,虚拟机伤不伤固态SSD...
- 多目标跟踪综述-Multiple Object Tracking: A Literature Review
- windows7修复计算机在哪里找,Windows7系统修复方法大全
- 360安全路由器外网连内网(端口映射)的设置方法
- 宅家必备 | 笔记本开启WiFi共享
- 使用THREE.js制作一款3D游戏
- ios课堂派怎么提交附件_iOS怎么在课堂派上传文件?
热门文章
- boost::thread_group相关的测试程序
- boost::sort模块实现相关字符串插入测试
- boost::phoenix::if_else相关的测试程序
- boost::fusion::join用法的测试程序
- Boost:bimap双图修改的测试程序
- VTK:相互作用之InteractorStyleTerrain
- VTK:图表之LabelVerticesAndEdges
- OpenCV DIS光流OpticalFlow的实例(附完整代码
- QtObject QML类型
- Qt Creator使用Clang工具