<强> 强>
,,,, 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)——触碰事件