`
hududumo
  • 浏览: 237687 次
文章分类
社区版块
存档分类
最新评论

Cocos2d-x学习笔记(4)- 触摸反馈

 
阅读更多
	对于游戏来说,触摸事件是最重要的游戏方式,基本上所有的游戏都是基于触摸事件完成的,不过触摸事件也是游戏最基础的事件反馈。cocos2d-x基本上沿袭cocos2d的触摸事件处理方式,下面就简单介绍一下。
	一般来说,每一个游戏场景都有一个或几个Layer组成,把场景分成Layer是为了当游戏的元素增多后方便游戏的管理,这样游戏的扩展性也很强,如果单独在一个Scene中处理整个游戏的元素就显得十分冗杂,而且扩展性差了很多。当然有时候一些很简单的界面还是可以不适用Layer直接进行处理的,当然这样做是不推荐的。如果类不是继承自CCLayer的话,要接受和处理触摸事件要很简单。首先要设置这个类可以接收触摸,在类的init()函数中加入SetIsTouchedEnable(true),接着重写触摸事件的处理函数。
		其实是有4个触摸事件函数的
	当手指首次触摸到屏幕时调用的方法:
	-(void) ccTouchesBegan(CCSet *touches,CCEvent *pEvent);
	手指在屏幕上移动时调用的方法:
	-(void) ccTouchesMoved(CCSet *touches,CCEvent *pEvent);
	当手指从屏幕上提起时调用的方法:
	-(void) ccTouchesEnded(CCSet *touches,CCEvent *pEvent);
	当触摸事件被取消时调用的方法(例如在切水果的时候手指滑到屏幕以外):
	-(void) ccTouchesCancelled(CCSet *touches,CCEvent *pEvent);
	-(void) ccTouchesCancelled(CCSet *touches,CCEvent *pEvent);
	ccTouchesCancelled()方法一般不重写,因为一般情况下没什么用,除非游戏的需要。这几个函数的参数分别是触摸的点集和触摸响应事件,CCTouch* touch用于单点触摸,CCSet* touches用于多点触摸,响应事件一般都要从点集中取出点,然后得到对应的屏幕上的坐标,最后转换成OpenGl的坐标,对于多点触摸来说,可以从点集中取出任意一点。
		中间的两步很重要,CCPoint location = touch->locationInView();location = CCDirector::sharedDirector()->convertToGL(location);,这两个函数完成了坐标的转换,游戏中坐标系的概念很重要,特别是到后面接触的游戏类型比较多时,在地图类的游戏中会涉及到NodeSpace以及WorldSpace等概念,总之如果能深入地理解这些概念的意义,在你写游戏过程如果遇到一些奇怪的问题就能很好地解决。
	如果是层的触摸,就要多加一步注册CCTouchDispatcher来让Layer处理Touch事件。
	
	一般来说是在init中写入注册,在dealloc中撤销注册,或者是在OnEnter中注册,在OnExit中撤销。如果想了解具体的细节可以去查阅相关的资料。
	在写切水果游戏的时候就特别需要对触摸事件进行比较深入地处理,这样才能画出比较好看的刀痕,我的刀痕是采用两层刀痕,下面一层是白色的一层,上面是粉红色的一层,限制刀痕的长度,一个8个点为单位连接刀痕,并对刀痕连接的处的比较机械的连接做一些处理,使得转弯的部分更加连贯。不过看到网上有的比较好的方式,就是完全用三角函数来写,哎,数学牛人!要是想要我的源码的话,我可以分享出来,也欢迎大家分享自己的源码,这才是开源的好处嘛!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics