Cocos2d CCLayer中的touch处理
来源:互联网 发布:mac三国志13战斗卡 编辑:程序博客网 时间:2024/05/20 22:28
Cocos2d作为一个开源的2D游戏引擎,最初是用python语言实现,mac app开发流行后,提供了一个Objective-C的版本。采用Cocos2d框架开发iphone游戏,极大提高了开发的速度。简单介绍参见百度百科,cocos2d官网。
Cocos2d提供了两种touch处理方式,Standard Touch Delegate和Targeted Touch Delegate方式(参见CCTouchDelegateProtocol.h中源代码),CCLayer默认是采用第一种方式(参见CCLayer的 registerWithTouchDispatcher方法)。
在CCLayer子类中要能接收touch事件,首先需要激活touch支持,在init方法中设置isTouchEnabled值为YES。
- Standard Touch Delegate(CCLayer默认采纳这种方式)
Standard方法中用户需要重载四个基本的touch处理方法,如下:
-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
当touch事件发生时,会调用该方法响应touch事件。如果是单点touch,则只需要调用 UITouch *touch = [touches anyObject],就可以获取touch对象;如果需要响应多点 touch,则需要调用[[event allTouches] allObjects]返回一个UITouch的NSArray对象,然后使用NSArray的objectAtIndex依次访问各个UITouch对象。为了获取UITouch对象的坐标(假设该UITouch名称为touch),调用[touch locationInView: [ touch view]]会返回一个UIView相关的坐标viewPoint。
使用Cocos2d的新建应用程序向导创建一个新的cocos2d application时,在xxxAppDelegate类的applicationDidFinishLaunching方法中CCDirector会将UIView转换为支持OpenGL ES的EAGLView。此时,我们还需要将前面获取的UIView中的viewPoint转换为EAGLView坐标,调用[[CCDirector sharedDirector] convertToGL: viewPoint]即可实现。
-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
-(void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
-(void) ccTouchesCancelled:(NSSet*)touch withEvent:(UIEvent *)event;
这三个方法和ccTouchesBegan类似。
- Targeted Touch Delegate方式
在standard方式中的响应处理事件处理的都是NSSet,而 targeted方式只处理单个的UITouch对象,在多点触摸条件下,应该采纳standard方式。在使用targeted方式之前需要重写CCLayer中的registerWithTouchDispatcher方法:
//记得在头文件中导入“CCTouchDispatcher.h”
-(void) registerWithTouchDispatcher {
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}
targeted方式中用户需要重载4个基本的处理方法,其中ccTouchBegan必须重写,其他三个是可选的。
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event; (必须实现)
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event;
- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event;
每次touch事件发生时,先调用ccTouchBegan方法,该方法对每个UITouch进行响应并返回一个BOOL值,若为YES,则后续的ccTouchMoved、ccTouchEnabled和ccTouchCancelled才会接着响应。
- 多点触摸支持
在xxxAppDelegate类的applicationDidFinishLaunching方法中加入下面代码 [glView setMultipleTouchEnabled:YES];
更多这方面信息参见这篇英文blog。
- Cocos2d CCLayer中的touch处理
- cocos2d学习-CCLayer中的touch
- Cocos2D-iphone CCLayer中的两种触摸(touch)处理方式
- Cocos2d-X 学习笔记 22 CCLayer 界面Touch事件处理
- iphone开发笔记——Cocos2d CCLayer中的touch
- 详解Cocos2d CCLayer中Touch使用方法
- 详解Cocos2d CCLayer中Touch使用方法
- 详解Cocos2d 开发关于CCLayer中Touch事件 以及优先级
- cocos2d-x中的CCDirector和CCLayer
- (Standard Touch Delegate 和 Targeted Touch Delegate)CCLayer中的两种Touch类型
- CCLayer中Touch事件
- Cocos2d 的touch处理方式
- Cocos2d-x Touch事件处理
- cocos2d Touch处理摘抄总结
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x场景中的层(CCLayer)及其触摸消息响应
- cocos2d-x中用CCLayer实现对话框的简单做法,自动屏蔽下层Touch事件
- 奇怪的虹软
- 用VMVARE安装windowsXP出现operating system not found
- V4L2编程
- WCN1312调试记录
- 如何禁止开机时进入安全模式
- Cocos2d CCLayer中的touch处理
- 浅析开发板相关变量phys_io即EP93XX_APB_PHYS_BASE什么时候被引用
- java 连接access数据库示例
- Piwik中文安装指南
- 纠结了···
- linux里命令pkg-config工具的使用
- 你是胡萝卜,是鸡蛋,还是咖啡豆?
- LDR/STR指令学习
- 最新的英语翻译软件《BSC/BIC专业翻译系统》,可以“中译英语/英译中”