今天, 我们来学习cocos2dX里面的触摸事件与触摸事件合集, 如今的手机游戏交互基本上都是通过触摸交互的, 所以大家明确这节的重要性了吧, 本节篇幅比較大, 所以我就不扯闲话了

先来看看经常使用函数:

触摸事件:

addTargeteDelegate( 谁使用, 优先级, 是否拦截触摸消息);
//注冊单点触摸

virtual bool ccTouchBegan(CCTouch * touch,CCEvent * event);
//触摸開始

virtual void ccTouchMoved(CCTouch * touch,CCEvent * event);
//触摸滑动

virtual void ccTouchEnded(CCTouch * touch,CCEvent * event);
//结束触摸

virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);//其它事件中断触摸

触摸事件集合:

virtual void registerWithTouchDispatcher( void);
//注冊多点触摸

addStandardDelegate();
//加入托付

setTouchEnabled( bool);
//开启多点触摸, 貌似使用了这个之后就不能使用单点

virtual void 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);

我们先来实现触摸事件:

在头文件中面声明我们要重写的函数:

virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);<span style="white-space:pre">	</span>//触摸開始函数
<span style="white-space:pre"> </span>virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);<span style="white-space:pre"> </span>//触摸移动函数
<span style="white-space:pre"> </span>virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);<span style="white-space:pre"> </span>//触摸结束函数

开启单点触摸, 而且创建三个标签用来显示信息:

注意: 一定要开启单点触摸, 不然没有效果

	//开启单点触摸
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate( this, 0, false); //创建三个标签
CCLabelTTF* begin = CCLabelTTF::create( "begin:-->X:0.0, -->Y:0.0", "Arial", 24);
CCLabelTTF* move = CCLabelTTF::create( "move:-->X:0.0, -->Y:0.0", "Arial", 24);
CCLabelTTF* end = CCLabelTTF::create( "end:-->X:0.0, -->Y:0.0", "Arial", 24);
begin->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2 + 50));
move->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2));
end->setPosition( ccp( visibleSize.width / 2, visibleSize.height / 2 - 50));
addChild( begin, 0, 101);
addChild( move, 0, 102);
addChild( end, 0, 103);

我们来重写这三个函数:

getLocationInView()取得坐标系是以左上角为原点的哦

我们来看看效果:

看, 我们截取到了触摸事件的消息了吧

好了, 我们再来看看触摸事件集合:

为什么有了触摸事件之后我们还要使用触摸事件集合呢?如今的手机基本都支持多点触控, 而CCTouch不能获取多点触摸的事件, 所以触摸事件集合就应运而生了

我们 还是声明一下须要重写的函数:

virtual void registerWithTouchDispatcher();
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

在init里面开启多点触摸

//开启多点触摸
setTouchEnabled( true);

实现重写的函数:

void HelloWorld::registerWithTouchDispatcher()
{
//注冊多点触摸
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate( this, 0);
} void HelloWorld::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)
{
CCSetIterator iter = pTouches->begin();
for ( ; iter != pTouches->end(); ++iter)
{
CCTouch* pTouch = (CCTouch*)(*iter);
switch ( pTouch->getID())
{
case 0:{
CCLabelTTF* ttf1 = CCLabelTTF::create( "1", "Arial", 24);
ttf1->setPosition( pTouch->getLocation());
addChild( ttf1, 0, 101);
}break;
case 1:{
CCLabelTTF* ttf1 = CCLabelTTF::create( "2", "Arial", 24);
ttf1->setPosition( pTouch->getLocation());
addChild( ttf1, 0, 102);
}break;
case 2:{
CCLabelTTF* ttf1 = CCLabelTTF::create( "3", "Arial", 24);
ttf1->setPosition( pTouch->getLocation());
addChild( ttf1, 0, 103);
}break;
case 3:{
CCLabelTTF* ttf1 = CCLabelTTF::create( "4", "Arial", 24);
ttf1->setPosition( pTouch->getLocation());
addChild( ttf1, 0, 104);
}break;
case 4:{
CCLabelTTF* ttf1 = CCLabelTTF::create( "5", "Arial", 24);
ttf1->setPosition( pTouch->getLocation());
addChild( ttf1, 0, 105);
}break;
default:
break;
}
} } void HelloWorld::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent)
{
CCSetIterator iter = pTouches->begin();
for ( ; iter != pTouches->end(); ++iter)
{
CCTouch* pTouch = (CCTouch*)(*iter);
switch ( pTouch->getID())
{
case 0:{
CCLabelTTF* ttf = (CCLabelTTF*)this->getChildByTag( 101);
ttf->setPosition( pTouch->getLocation());
}break;
case 1:{
CCLabelTTF* ttf = (CCLabelTTF*)this->getChildByTag( 102);
ttf->setPosition( pTouch->getLocation());
}break;
case 2:{
CCLabelTTF* ttf = (CCLabelTTF*)this->getChildByTag( 103);
ttf->setPosition( pTouch->getLocation());
}break;
case 3:{
CCLabelTTF* ttf = (CCLabelTTF*)this->getChildByTag( 104);
ttf->setPosition( pTouch->getLocation());
}break;
case 4:{
CCLabelTTF* ttf = (CCLabelTTF*)this->getChildByTag( 105);
ttf->setPosition( pTouch->getLocation());
}break;
default:
break;
}
}
} void HelloWorld::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
{
CCSetIterator iter = pTouches->begin();
for ( ; iter != pTouches->end(); ++iter)
{
CCTouch* pTouch = (CCTouch*)(*iter);
switch ( pTouch->getID())
{
case 0:{
removeChildByTag( 101);
}break;
case 1:{
removeChildByTag( 102);
}break;
case 2:{
removeChildByTag( 103);
}break;
case 3:{
removeChildByTag( 104);
}break;
case 4:{
removeChildByTag( 105);
}break;
default:
break;
}
}
}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzY0MjQ5NA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

看看效果:

额, 电脑上仅仅能显示一个触摸点, 我刚刚在手上測试了一下, 能够同一时候操作多个点的, 我等会上传安装文件,

我们来看看代码:

首先, 我们设置多点触控可用, 而且注冊了它, 这是必须的哦

我们在開始触摸的时候传了两个參数, 第一个參数是个容器, 我们将它取出来, 将begin()取出来作为開始标志, end()取出来作为结束标志, 遍历了这个容器, 在遍历的过程中, 我们取出了每一个对象的ID, 我们全部的触摸点都在这个容器里面, 和数组下标同样, 也是从0開始的, 所以我们取出当ID等于0的时候, 我们就绘制出第一个标签, 我们这里依次取出了5个, 同理, 在移动里面, 我们依据ID改动了他们的位置, 在结束触摸里面, 我们依据标记, 移除了对应的对象

下载安装文件

好了, 今天的就到这里, 希望大家还是多多练习, 有什么疑问就加群: 223856254

cocos2dX 事件之触摸事件和触摸事件集合的更多相关文章

  1. cocos2d-x 详解之 CCLayer(触摸事件)

    CCLayer继承自CCNode,在CCLayer中可以实现单点触摸.多点触摸和重力感应回调3种不同形式的交互.这部分的难点在于,当存在多个层都要去接收触摸时它的响应机制是如何处理的.了解内部的处理机 ...

  2. Android 使用代码主动去调用控件的点击事件(模拟人手去触摸控件)

    使用代码主动去调用控件的点击事件(模拟人手去触摸控件) //View 可以是LinearLayout,Button,TextView View.performClick();

  3. ##DAY4 事件的基本概念、触摸的基本概念、响应者链、手势

    ##DAY4  事件的基本概念.触摸的基本概念.响应者链.手势 #pragma mark ———————事件的基本概念 ——————————— 事件的基本概念: 1)事件是当用户的手指触击屏幕及在屏幕 ...

  4. 移动端触摸(touch)事件

    移动端时代已经到来,作为前端开发的我们没有理由也不应该坐井观天,而是勇敢地跳出心里的那口井,去拥抱蔚蓝的天空.该来的总会来,我们要做的就是接受未知的挑战.正如你所看到的,这是一篇关于移动端触摸事件的文 ...

  5. 2019-11-29-WPF-从触摸消息转触摸事件

    原文:2019-11-29-WPF-从触摸消息转触摸事件 title author date CreateTime categories WPF 从触摸消息转触摸事件 lindexi 2019-11- ...

  6. 移动端触摸、点击事件优化(fastclick源码学习)

    移动端触摸.点击事件优化(fastclick源码学习) 最近在做一些微信移动端的页面,在此记录关于移动端触摸和点击事件的学习优化过程,主要内容围绕fastclick展开.fastclick githu ...

  7. 2019-5-13-WPF-从触摸消息转触摸事件

    title author date CreateTime categories WPF 从触摸消息转触摸事件 lindexi 2019-05-13 09:43:48 +0800 2019-05-12 ...

  8. 【Cocos2dx 3.3 Lua】触屏事件

    cocos2dx 3.x触屏时间分为单点触摸和多点触摸:     单点触摸:(即只有注册的Layer才能接收触摸事件)      多点触摸点单用法(多个Layer获取屏幕事件):           ...

  9. 深入理解DOM事件机制系列第四篇——事件模拟

    × 目录 [1]引入 [2]模拟机制 [3]自定义事件 前面的话 事件是网页中某个特别的瞬间,经常由用户操作或通过其他浏览器功能来触发.但实际上,也可以使用javascript在任意时刻来触发特定的事 ...

  10. 深入理解DOM事件类型系列第一篇——鼠标事件

    × 目录 [1]类型 [2]顺序 [3]坐标位置[4]修改键[5]相关元素[6]鼠标按键[7]滚轮事件[8]移动设备 前面的话 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备.本文 ...

随机推荐

  1. 插件化—配置xml的辅助测试

    1.xml文件,xml文件在res/xml目录下 <?xml version="1.0" encoding="utf-8"?> <infos& ...

  2. C++中rand()函数的用法

    C++中rand()函数的用法   2011-12-30 11:03:59|  分类: C / C++|举报|字号 订阅 一.C++中不能使用random()函数 random函数不是ANSI C标准 ...

  3. 【开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位网友补充完善

    链接地址:http://www.tuicool.com/articles/jyA3MrU 时间 2015-01-05 10:08:18  我是程序猿,我为自己代言 原文  http://blog.cs ...

  4. Android studio gradle配置

    什么是Gradle? Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言. gr ...

  5. cocos2d-x游戏开发系列教程-中国象棋04-摆棋

    前情回顾 在之前的学习中,我们已经了解到,下棋主界面是由CCMainMenu类实现的,在它的init函数中,初始化了 主界面需要的各种数据,包括:创建控件,初始化32个棋子,初始化执行变量等等,在这个 ...

  6. ※数据结构※→☆线性表结构(list)☆============单向循环链表结构(list circular single)(四)

    循环链表是另一种形式的链式存贮结构.它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环. 单循环链表——在单链表中,将终端结点的指针域NULL改为指向表头结点或开始结点即可. 循环链表的 ...

  7. HDOJ 5088 Revenge of Nim II 位运算

    位运算.. .. Revenge of Nim II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  8. ios9怎么设置6位密码 ios9设置6位密码图文教程

    在原来的 iOS 系统中,只有四位数字密码与复杂密码之分,而在 iOS9 系统中却多出了一个六位数字密码,那ios9怎么设置6位密码,今天小编就为大家带来ios9设置6位密码图文教程   在原来的 i ...

  9. 柔性数组-读《深度探索C++对象模型》有感

    最近在看<深度探索C++对象模型>,对于Struct的用法中,发现有一些地方值得我们借鉴的地方,特此和大家分享一下,此间内容包含了网上搜集的一些资料,同时感谢提供这些信息的作者. 原文如下 ...

  10. Android 应用开发推荐书单

    本文由 伯乐在线 - zerob13 翻译自 fromdev.欢迎加入Android小组.转载请参见文章末尾处的要求. Android 已经成为了世界上最受欢迎的操作系统之一.成千上万的智能手机和平板 ...