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,单点触摸,多点触摸,触摸优先和触摸事件的吞噬相关推荐

  1. 多点触摸与单点触摸接口主要区别【转】

    转自:http://blog.csdn.net/eleven_yy/article/details/7723079 上发单点触摸事件 input_report_key(input,ABS_MT_TRA ...

  2. 正点原子Linux 触摸芯片改成GT911后的驱动修改(单点和多点触摸)

    目录 单点触摸 设备树修改 编译设备树和驱动模块并运行 运行测试 多点触摸 野火的Linux的触摸芯片就是用的GT911,如果用GT911替换原来正点原子的FT5x06或者GT9147,需要做一些修改 ...

  3. 移动端js触摸touch详解(附带案例源码)

    移动端触摸滑动原理详解案例,实现过程通过添加DOM标签的触摸事件监听,并计算触摸距离,通过距离坐标计算触摸角度,最后通过触摸角度去判断往哪个方向触摸的. 触摸的事件列表 触摸的4个事件: touchs ...

  4. linux触摸板设置密码程序6,Linux下Synaptics笔记本触摸板的配置

    笔记本上Synaptics的触摸板比较常见,但关于其配置的资料目前来看比较混乱,主要原因是这两年来桌面环境的变化比较大,搜索出来的结果是不同时期的人的解决办法,往往五花八门让人无所适从,如果想完全控制 ...

  5. linux键盘触摸板失灵,linux 中屏幕合上后触摸板无法使用

    屏幕合上后触摸板无法使用 这是一个遗留问题,从两年前开始就一直存在.过去由于对驱动不熟悉,没有考虑驱动的问题. 现在首先判断触摸板使用的驱动是哪一个.搜集资料发现,当前系统中的触摸板驱动为 psmou ...

  6. win7触摸板怎么关闭_触摸板开关怎么使用 如何锁定简式触摸板开关

    现如今我们在生活条件上的不断提高,家家户户都具备台式电脑或者是笔记本等高科技电子产品,那么笔记本的触控板其实就相当于是鼠标的功能.但是使用起来并没有鼠标方便,有时打字的时候还容易产生误操作,许多网友都 ...

  7. Unity中单点和多点触控

    Input.touchCount获取当前的触摸点数目,若为1则是单点触控,大于1则是多点触控 点击事件用:Input.GetTouch(num).phase== TouchPhase.Began这样的 ...

  8. 【unity3D】单点和多点触控

    总结: Input.touchCount获取当前的触摸点数目,若为1则是单点触控,大于1则是多点触控 点击事件用:Input.GetTouch(num).phase == TouchPhase.Beg ...

  9. Android4.0 TP多点变单点,单点变多点问题

    由于某些IC的特性,当为多点时,默认靠近Y轴的点ID为ID0,这样就会造成当多点变单点时,单点失效,单点变多点时,会变成单点的划线动作.解决这个BUG的方法: 当按在触摸屏上的point数与上次的po ...

最新文章

  1. 【HDU】5256 系列转换(上涨时间最长的序列修饰)
  2. 图像分类简单介绍-转
  3. java压缩----使用ANT JDK压缩---只压缩选中目录的指定文件夹
  4. click js自动点击 vue_vue.js2.0点击获取自己的属性和jquery方法
  5. Linux内核源代码分析-目录
  6. 动环监控整体方案,动环监控系统施工方案
  7. python提取pdf表格数据 无边框_Python使用Tabula提取PDF表格数据
  8. poj 1838 Banana
  9. 解决MySQL登录1045错误
  10. Java Swing实现仿微信PC客户端程序 SOCKET 即时通信系统
  11. T00ls Lpk Sethc 首创lpk劫持方式粘滞键后门,体积超小!
  12. 病毒RNA提取:EpiQuik 病毒RNA提取纯化试剂盒方案
  13. 2022年Web 前端怎样入门?最新Web前端入门的学习路线
  14. 如何获取广告服务流量变现数据,助力广告效果分析?
  15. 如何压缩PDF文件?教你两种压缩文件的方法
  16. 获取svg和svg内容的方法
  17. 学习 Go 语言 0x04:《Go 语言之旅》中切片的练习题代码
  18. vue2 + elementui 日期时间选择器 禁止选择当前时间之前的日期及时间,并添加相应校验规则
  19. C#轻松打造vista透明窗口(xp系统无任何vista主题)(汤贞营作品)
  20. 微信管制下,如何让你的H5诱导分享更高效?

热门文章

  1. C++学习笔记4[循环语句]
  2. 一篇带你搞透回溯算法
  3. pyqt5讲解9:时间模块timer和网页交互
  4. VTK:不透明度用法实战
  5. VTK:vtkTupleInterpolator 插值用法实战
  6. wxWidgets:wxComboBox类用法
  7. boost::python模块实现使用原始指针访问数据的示例
  8. boost::process::start_dir相关的测试程序
  9. boost::math::quadrature::gauss_kronrod用法的测试程序
  10. boost::boost::maximum_adjacency_search用法的测试程序