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. 网络服务-RSYNC
  2. java基础学习总结一(java语言发展历史、jdk的下载安装以及配置环境变量)
  3. [置顶] 程序员的奋斗史(十五)——谈性格
  4. 打印session cookie
  5. pythonpandas设置索引_python – pandas:使用(row,col)索引设置值
  6. 【教程】怎么同时同时ping1000个IP地址?
  7. broker可以禁用吗 time_很多人会问Win8.1系统Runtime Broker是什么进程?可以禁用吗?带着这两个问题...
  8. 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
  9. NodeJS中resolve添加地址无效
  10. MSP430F5529 DriverLib 库函数I2C驱动OLED屏幕
  11. java正则匹配英文句号_Scala 正则表达式 0411
  12. I2C总线时序模拟(二)-加深理解总线协议
  13. hdfs 指令_Hadoop Shell命令
  14. VMware要不要装在固态SSD上,虚拟机系统文件要不要放固态SSD上,虚拟机伤不伤固态SSD...
  15. 多目标跟踪综述-Multiple Object Tracking: A Literature Review
  16. windows7修复计算机在哪里找,Windows7系统修复方法大全
  17. 360安全路由器外网连内网(端口映射)的设置方法
  18. 宅家必备 | 笔记本开启WiFi共享
  19. 使用THREE.js制作一款3D游戏
  20. ios课堂派怎么提交附件_iOS怎么在课堂派上传文件?

热门文章

  1. boost::thread_group相关的测试程序
  2. boost::sort模块实现相关字符串插入测试
  3. boost::phoenix::if_else相关的测试程序
  4. boost::fusion::join用法的测试程序
  5. Boost:bimap双图修改的测试程序
  6. VTK:相互作用之InteractorStyleTerrain
  7. VTK:图表之LabelVerticesAndEdges
  8. OpenCV DIS光流OpticalFlow的实例(附完整代码
  9. QtObject QML类型
  10. Qt Creator使用Clang工具