cocos2dx基础篇(9)——触碰事件

  

<强>

,,,, cocos2dx游戏引擎的重点是在于移动设备的跨平台开发,而移动设备上的游戏大部分都是通过屏幕触碰来进行的。比如主菜单的按钮触碰,打飞机中飞机的触碰移动,都需要用到触碰操作。想一想之前讲的菜单按钮CCMenu,菜单项的点击响应事件,其实就是触碰。

,,,, cocos2dx引擎中实现触碰的类CCTouchDelegate。而CCLayer类默认继承了CCTouchDelegate接口,所以CCLayer的子类无须再重新使用这些接口,这样就很方便地为我们提供了触摸操作相关的操作。

,,,,触碰事件主要分为两类:和。

,,,,

,,,,,,,,一,单点触碰TargetedDelegate,以及参数CCTouch类。

,,,,,,,,二,多点触碰StandardDelegate,以及参数CCSet类。

,,,,,,,,三、两类触碰的区别。


<强>

,,,, https://github.com/shahdza/Cocos_LearningTest/tree/master/demo_%E8%A7%A6%E7%A2%B0%E4%BA%8B%E4%BB%B6Touch 


<强>

,,,, http://shahdza.blog.51cto.com/2410787/1560222


<人力资源/>


<强>

,,,,单点触碰,顾名思义,就是只接受一个点的触摸响应事件。

,,,,在使用触碰之前,必须要先注册触碰委托。单点触碰的注册委托函数为。


,,,,写在对手()中。

///* *,,,,,,,,   ,*开启单点触碰TargetedDelegate   ,*注册触碰:addTargetedDelegate(“触碰事件委托的对象”,“优先级”,“是否拦截触屏事件”);   ,*优先级的值越小,就越高越早被响应。   3个,*当第参数为真时,表示对本次触屏事件进行拦截,也就是说当触屏事件响应了本次触屏委托后,将不会再继续响应其他触碰委托。   ,*/void  HelloWorld::对手(),   {//注册触碰响应事件   CCDirector: sharedDirector ()→getTouchDispatcher ()→addTargetedDelegate(0,这假);   CCLayer:对手();//一定不要忘了调用父类的对手   }//

,,,,写在onExit()中。

///* *,,,,,,,,   ,*关闭单点触碰TargetedDelegate   ,*注销触碰:removeDelegate(“注销触碰事件委托的对象”);   ,*/void  HelloWorld:: onExit ()   {//注销触屏响应事件   CCDirector: sharedDirector ()→getTouchDispatcher ()→removeDelegate(这个);   CCLayer: onExit();//一定不要忘了调用父类的onExit   }//

,,,,, ccTouchBegan ccTouchMoved, ccTouchEnded, ccTouchCancelled。

,,,,其中ccTouchBegan的返回值为bool类型:

,,,,,,,,当返回真实时,表示继续响应ccTouchMoved, ccTouchEnded事件;

,,,,,,,,当返回假时,则不再继续响应这两个事件。

//virtual  bool  ccTouchBegan (CCTouch *,触摸,CCEvent *,事件),,,,,,,,,//手指碰到屏幕时调用   virtual  void  ccTouchMoved (CCTouch *,触摸,CCEvent *,事件),,,,,,,,,//手指在屏幕上滑动时调用   virtual  void  ccTouchEnded (CCTouch *,触摸,CCEvent *,事件),,,,,,,,,//手指离开屏幕是调用   virtual  void  ccTouchCancelled (CCTouch  * pTouch, CCEvent  *增加),,//取消触碰//


,,,, CCTouch类是用来存储用户触摸屏幕的过程中,其触摸点的相关信息。也就是保存了触碰的整个过程中,手指所在的位置坐标。

,,,,需要在。h中添加引用命名空间:才可以使用。

,,,,

//class  CCTouch : public  CCObject ,,,,,,,   {   CCPoint  getLocation(),,,,,,,,,,//返回当前触点的坐标   CCPoint  getPreviousLocation(),,//返回前一个触点的坐标   CCPoint  getStartLocation(),,,,,//返回开始触碰时的坐标   CCPoint  getDelta(),,,,,,,,,,,,,//返回最近两个触点的偏移量坐标   };//

,,,,接下来将举个例子:<强>


,,

////触屏事件   virtual  bool  ccTouchBegan (CCTouch *,触摸,CCEvent *,事件);   virtual  void  ccTouchMoved (CCTouch *,触摸,CCEvent *,事件);   virtual  void  ccTouchEnded (CCTouch *,触摸,CCEvent *,事件);//生命周期   virtual  void 对手();   virtual  void  onExit ();//

,,,,


////开启触屏监听   void  HelloWorld::对手(),   {   CCDirector: sharedDirector ()→getTouchDispatcher ()→addTargetedDelegate(0,这假);   CCLayer:对手();,//一定不要忘的了   }//关闭触屏监听   void  HelloWorld:: onExit ()   {   CCDirector: sharedDirector ()→getTouchDispatcher ()→removeDelegate(这个);   CCLayer: onExit();,,//一定不要忘的了   }//

cocos2dx基础篇(9)——触碰事件