游戏跟视频最大的区别就是互动,而手游(基于智能手机)主要靠触摸屏幕、重力传感和虚拟键盘等方式实现互动。这里主要记录Cocos2D-x对玩家触屏操作的处理。
在Cocos2D-x中触屏分为单点触屏和多点触屏,下面介绍一下与触屏相关的几个类、触屏事件和流程。
·CCTouch(触屏点类):这个类用于封闭触屏点,通过它的locationInView方法返回当前触屏点CCPoint。它还记录上一个触屏点。
·CCTouchDelegate(触屏代理协议类):它是触屏事件委托,系统捕捉到触屏事件后交由它或者它的子类处理。所以我们在处理触屏事件时,必须继承并实现其接口。看一下CCTouchDelegate的类继承关系图,如下:
这里CCStandardTouchDelegate专门用于处理多点触屏,CCTargetedTouchDelegate专门用于处理单点触屏,它们都是
CCTouchDelegate的子类。
再看一下CCTouchDelegate定义的接口方法,如下:
值得一提的是,ccTouchCancelled和ccTouchesCancelled方法很少使用,在接到系统中断通知,需要取消触屏事件时才会调用。
·CCTouchDispatcher(触屏事件分发类):这个类实现触屏事件的分发,它相当于是CCTouchDelegate的容器,负责管理多个触屏事件对象,如触屏事件优先级、添加或删除触屏事件。
·CCTouchHandler(触屏事件处理器):它其实就是对CCTouchDelegate的封闭,增加支持触屏事件优先级,优先级越高,分发的时候越容易获得触屏事件响应。
介绍了这么多触屏相关的类,那么用户想要使用触屏事件,应该做哪些操作呢?
1)继承于CCTouchDelegate类;
2)添加注册和销毁触屏事件,一般在对象初始化时注册,在对象删除时销毁;
注册:pDirector->getTouchDispatcher()->addTargetedDelegate(this,0,true)
销毁:pDirector->getTouchDispatcher()->removeDelegate(this)
3)处理触屏事件:实现CCTouchDelegate类接口,在方法中填写触屏事件处理。
当用户触摸屏幕,CCTouchDispatcher是如何将触屏事件分发给指定的CCTouchDispatcher子类对象进行处理,调用相应的触屏事件呢?
可以知道CCTouchDispatcher继承于EGLTouchDelegate类。EGLTouchDelegate类是一个接口类,定义如下:
触屏相关的内容差不多就这些了吧,我想现在想要添加触屏事件,应该是一件很轻松和愉快的事。需要提及的是在TestCpp工程的MutiTouchTest测试项有多点触屏的代码实例,如果对多点触屏感兴趣可以研究一下。
-------------------------------------------------------------------------------------------------------------------
注:本人在本博客的原创文章采用创作共用版权协议(http://creativecommons.org/licenses/by-nc-sa/2.5/cn/), 要求署名、非商业用途和保持一致。要求署名包含注明我的网名及文章来源(我的博客地址:http://www.cnblogs.com/binbingg)。