详解Cocos2d CCLayer中Touch使用方法 |
本文标签:Cocos2d CCLayer Touch Cocos2d CCLayer中Touch使用方法是本文要介绍的内容,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处理方法,如下:
当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]即可实现 。
这三个方法和ccTouchesBegan类似 。 Targeted Touch Delegate方式 在standard方式中的响应处理事件处理的都是NSSet,而 targeted方式只处理单个的UITouch对象,在多点触摸条件下,应该采纳standard方式 。在使用targeted方式之前需要重写CCLayer中的registerWithTouchDispatcher方法: //记得在头文件中导入“CCTouchDispatcher.h”
targeted方式中用户需要重载4个基本的处理方法,其中ccTouchBegan必须重写,其他三个是可选的 。
每次touch事件发生时,先调用ccTouchBegan方法,该方法对每个UITouch进行响应并返回一个BOOL值,若为YES,则后续的ccTouchMoved、ccTouchEnabled和ccTouchCancelled才会接着响应 。 多点触摸支持 在xxxAppDelegate类的applicationDidFinishLaunching方法中加入下面代码
小结:详解Cocos2d CCLayer中Touch使用方法的内容介绍完了,希望通过本文的学习对你有所帮助! |