下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

教你怎么用Cocos2D-X实现触摸事件重新分发

作者:课课家教育     来源: http://www.kokojia.com点击数:1058发布时间: 2019-03-28 10:27:56

标签: Cocos2D-X面试题游戏开发Cocos2D-X教程

  又到了面试的旺季了,很多同学都在找合适的公司准备面试吧,现在本篇教程将教你怎么用Cocos2d-x实现触摸事件重新分发。

  前段时候换工作时,去触控科技面试,面试官问了这么一个问题。”当弹出一个新窗口时,如果屏蔽掉下面层的触摸事件?“

  这个问题对于接触cocos2d引擎一段时间的同学来说,都不算难。当时我想到了两种解决方案,也是在之前项目中用到过的:

  一、加一个屏蔽层,TouchMaskLayer, 它的写法差不多就是

  a. CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuTouchPriority, true);

  b. ccTouchBegan 中 return true;

  二、先把本层的触摸开关手动关掉,再加弹出层,实现方式差不多是 :

  a. 本层实现 onControl() 和 lostControl(), 把本层触摸相关的对象(CCLayer, CCMenu CCEditbox,...)setTouchEnable(true/false),

  b.弹出新层之前,调用lostControl(), 新层关掉时回调onControl()

  第一种写法简单粗暴,简单的逻辑可以直接这么用。它的问题是,如果弹出层上需要多点触摸的话,这是行不通的,因为多点触摸优先级没有TouchMaskLayer高,它将得不到事件。

  第二种方法,是和三国塔防程序同事杨新宁,魏莱一起讨论而来的。这种方式我一直在用,除了麻烦一些外,没发现任何问题。其实这种方式也没想象中的麻烦,因为一个场景中可以有触摸事件的对象也就那几个。

  我问他们有什么更好的方式时,捕鱼2主程汪东林(在些表示感谢)说了他们的做法,自己处理事件分发。我根据这个想法自己做了个弹出层的基类UpperLayer

教你怎么用Cocos2D-X实现触摸事件重新分发_Cocos2D-X面试题_游戏开发_Cocos2D-X教程_课课家

  所有的弹出层,只要继承一下这个就可以,他的优点是事件分发由自己来控制,比较灵活

赞(15)
踩(4)
分享到:
华为认证网络工程师 HCIE直播课视频教程