cocos2dX 事件之触摸事件和触摸事件集合
今天, 我们来学习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 事件之触摸事件和触摸事件集合的更多相关文章
- cocos2d-x 详解之 CCLayer(触摸事件)
CCLayer继承自CCNode,在CCLayer中可以实现单点触摸.多点触摸和重力感应回调3种不同形式的交互.这部分的难点在于,当存在多个层都要去接收触摸时它的响应机制是如何处理的.了解内部的处理机 ...
- Android 使用代码主动去调用控件的点击事件(模拟人手去触摸控件)
使用代码主动去调用控件的点击事件(模拟人手去触摸控件) //View 可以是LinearLayout,Button,TextView View.performClick();
- ##DAY4 事件的基本概念、触摸的基本概念、响应者链、手势
##DAY4 事件的基本概念.触摸的基本概念.响应者链.手势 #pragma mark ———————事件的基本概念 ——————————— 事件的基本概念: 1)事件是当用户的手指触击屏幕及在屏幕 ...
- 移动端触摸(touch)事件
移动端时代已经到来,作为前端开发的我们没有理由也不应该坐井观天,而是勇敢地跳出心里的那口井,去拥抱蔚蓝的天空.该来的总会来,我们要做的就是接受未知的挑战.正如你所看到的,这是一篇关于移动端触摸事件的文 ...
- 2019-11-29-WPF-从触摸消息转触摸事件
原文:2019-11-29-WPF-从触摸消息转触摸事件 title author date CreateTime categories WPF 从触摸消息转触摸事件 lindexi 2019-11- ...
- 移动端触摸、点击事件优化(fastclick源码学习)
移动端触摸.点击事件优化(fastclick源码学习) 最近在做一些微信移动端的页面,在此记录关于移动端触摸和点击事件的学习优化过程,主要内容围绕fastclick展开.fastclick githu ...
- 2019-5-13-WPF-从触摸消息转触摸事件
title author date CreateTime categories WPF 从触摸消息转触摸事件 lindexi 2019-05-13 09:43:48 +0800 2019-05-12 ...
- 【Cocos2dx 3.3 Lua】触屏事件
cocos2dx 3.x触屏时间分为单点触摸和多点触摸: 单点触摸:(即只有注册的Layer才能接收触摸事件) 多点触摸点单用法(多个Layer获取屏幕事件): ...
- 深入理解DOM事件机制系列第四篇——事件模拟
× 目录 [1]引入 [2]模拟机制 [3]自定义事件 前面的话 事件是网页中某个特别的瞬间,经常由用户操作或通过其他浏览器功能来触发.但实际上,也可以使用javascript在任意时刻来触发特定的事 ...
- 深入理解DOM事件类型系列第一篇——鼠标事件
× 目录 [1]类型 [2]顺序 [3]坐标位置[4]修改键[5]相关元素[6]鼠标按键[7]滚轮事件[8]移动设备 前面的话 鼠标事件是web开发中最常用的一类事件,毕竟鼠标是最主要的定位设备.本文 ...
随机推荐
- VS2013配置opencv3.0.0 (win8.1)
今天下载了最新版本的opencv3.0.0,之前一直是opencv2.4.8 点击.exe文件,我将解压后的文件夹放在D:\盘,取名opencv30,D:\opencv30 添加环境变量:D:\ope ...
- Android项目使用Assets下的文件
Android项目在编译时,Assets下文件不被编译. Assets下的文件除了 html文件可以直接在项目中使用外,其他的文件都需要做处理滴. 在项目中使用方法: 使用流读取. ...
- 使用struts2和poi导出excel文档
poi眼下应该是比較流行的操作excel的工具了.这几天做了个struts2和poi结合使用来实现导出excel的功能.个人认为还是比較有用的.代码阅读起来也非常easy.下来就来分享下我的心得 1 ...
- SSH-Struts(一)——基本原理
简单介绍 Struts框架是MVC的一个实现,它非常好的结合了JSP.Servlet.JavaBean.Taglib等技术.它为MVC的各层提供了良好的支持,就像房地产商盖房子时先盖的大楼框架. 仅仅 ...
- Azure 云 Web 应用程序
Azure 云 Web 应用程序 原文:Getting Started作者:Rick Anderson翻译:谢炀(Kiler)校对:孟帅洋(书缘).刘怡(AlexLEWIS).何镇汐 设置开发环境 安 ...
- TPersistent的三个用途(读写DFM文件,Assign,RTTI),最主要还是第三个用途
不是什么类对象都需要RTTI,如果把它放在TObject,除了增加可执行文件的大小以及运行内存空间以外,没什么好处.
- WCF技术剖析之七:如何实现WCF与EnterLib PIAB、Unity之间的集成
原文:WCF技术剖析之七:如何实现WCF与EnterLib PIAB.Unity之间的集成 在这之前,我写过深入介绍MS EnterLib PIAB的文章(参阅<MS Enterprise Li ...
- python算法之二分查找
说明:大部分代码是在网上找到的,好几个代码思路总结出来的 通常写算法,习惯用C语言写,显得思路清晰.可是假设一旦把思路确定下来,并且又不想打草稿.想高速写下来看看效果,还是python写的比較快.也看 ...
- PAT 1002 Hello World for U (20)
Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. ...
- 文本框、文本编辑框、按钮——axure线框图部件库介绍
1. 与文本面板组合设计表单 文本框主要是在设计页面表单的时候,用的最多,通过与文本面板的组合使用,下面我们通过文本面板和文本框设计了一个简单的注册表单 对于,文本框中的文字,只需要双击即可编辑文字 ...