Cocos2d-x教程(3)-初识触屏事件
来源:互联网 发布:c语言中for与while 编辑:程序博客网 时间:2024/05/14 10:32
一个手机游戏,不会没有触屏事件,比如我们玩的捕鱼达人游戏,在点击屏幕某一个位置后,炮弹变回打向那个位置,这就是通过触屏事件来实现的。
Cocos2d-x中,最简单的触屏实现方法就是通过CCLayer的TouchEnable属性开启或者关闭接收触屏事件。(此时的类一定是继承CCLayer的,如 classHelloWorld : publiccocos2d::CCLayer)
以下事件被称为标准触摸(standard touch)事件
以上四种方法中,都含有两个参数,pTouches是一个CCTouch对象的集合(CCTouch表示一个触摸点),包含了当前触摸事件中的所有触摸点.pEvent参数是老的引擎版本留下的形参,在当前版本中并无意义.
此时我们将四种方法写到.h文件中声明,若要真正触发四个函数,还需要开启CCLayer的TouchEnable属性,我们可以在.cpp文件的init()方法中加上如下代码:
this->setTouchEnable(true);
完成后上述操作后,我们在.cpp文件中添加四种方法的实现部分
可以看到运行项目后,在屏幕上点击屏幕会触发ccTouchBegan ,移动时会触发ccTouchMoved, 手指离开后触发ccTouchEnded事件。
如果想要获取到触摸点的坐标,我们可以在ccTouchesBegan函数内添加如下代码:
CCTouch * touch=(CCTouch *)pTouches->anyObject();
CCPoint p1=touch->getLocation(); //获取单击坐标,该坐标是基于3D的
CCPoint p2=touch->getLocationInView(); //获取单击坐标,该坐标基于2D 以左上角为原点
CCPoint p3=CCDirector::sharedDirector()->convertToUI(pos2) //获取基于2d-x的坐标,也就是笛卡尔坐标
此时我们所使用的便是CCLayer的标准触摸事件,这个函数会使每一个CCLayer都能获取到屏幕事件,但是我们有时候并不希望层上面的所有对象都能接收到我们的事件,比如游戏中的一些选项按钮,我们在触摸它们的时候要保证不能对其他的层产生影响,即点击了人物状态按钮,不能让物品栏也同时弹出来。这个时候我们就需要用到一种带目标的触摸事件(targeted touch)机制,通俗来说,这种触摸方式就是一个CCLayer的垄,我们来看一下它们的代码:
我们可以观察到与之前的标准触摸函数不一样的地方
第一,开始触摸函数的返回值变成了bool,表示声明是否要捕捉这个触摸点,只有在此方法中捕捉到的触摸点才会继续引发其他三个事件,否则其他三个事件会被忽略. 当这个函数的返回值为 true时,其他方法都可以被调用,当返回值为false时,所有的标准屏幕事件函数会被调用.
第二,函数的名称由之前的ccTouchesBegan变成了ccTouchBegan
第三,第一个参数变成了pTouch,其实就是单数和复数的区别.pTouch一次只能传入一个触摸点
然而想要注册屏幕监听事件我们还需要重写一个函数(如果不重写该函数则默认的是注册标准屏幕监听事件)
virtualvoid registerWithTouchDispatcher(void);
CCLayer::registerWithTouchDispatcher();相当于调用了父类CCLayer的registerWithTouchDispatch函数,作用是注册标准屏幕事件监听,这个函数会执行一段代码:pDispatcher->addStandardDelegate(this,0);
最后一行代码的意思是实现一个CCTargetedTouchDelegate接口,把对象注册到分发器中。
前两个参数第一个表示触摸接收对象,第二个表示优先级,值越小越优先,可以为负数。第三个参数表示是否“吞噬”一个触摸,如果为真,那么一个触摸一旦被捕捉,所有优先级更低的接收对象都无法接收到触摸。
实际上游戏中的每一个元素都可以实现触摸,只不过CCLayer为我们提供了现成的API
- Cocos2d-x教程(3)-初识触屏事件
- Cocos2d-x教程(3)-初识触屏事件
- cocos2d-x 触屏事件
- cocos2d-x 触屏事件
- cocos2d-x 2.X 触屏事件
- Cocos2d-x 3触屏事件(单点触屏)
- cocos2d-x Touch触屏事件
- cocos2d-x 触屏事件详解
- cocos2d-x + lua 处理触屏事件
- Cocos2d-x 触屏事件解析
- cocos2d-x Touch触屏事件
- cocos2d-x 触屏事件详解
- cocos2d-x 自定义Touch事件触屏:
- Cocos2D-X事件处理机制之触屏事件
- Cocos2D-X事件处理机制之触屏事件
- Cocos2d-x初识
- Cocos2d-x初识
- 初识Cocos2D-X
- android连接打印机
- StageFright框架流程解读
- MQTT在linux下环境下的编译与配置
- 常用的正则表达式
- linux进程退出的时exit,_exit区别和联系
- Cocos2d-x教程(3)-初识触屏事件
- 【COCOS2DX-LUA 脚本开发之十二】Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)
- 每日一录:昨晚又触动了我心底的那一丝思念
- 简单的RPC java实现
- System.exit(0)和System.exit(1)区别
- Axis2 Web Service(二)
- Java中static关键字用法总结
- Cocos2d-x常用函数及常用宏
- 西医综合考研复习:乳腺癌