cocos2d-x的触摸消息分发机制

来源:互联网 发布:吴天宇 网络歌手 编辑:程序博客网 时间:2024/05/09 01:41

cocos2d-x的消息分发和大部分的引擎有点区别,优点和缺点都很明显。

一般的分发思路都会和zorder有一定关系,同样屏幕位置的响应元素,离用户近的会屏蔽离用户远的元素的响应,即zorder值大的屏蔽zorder值小的。cocos2d-x则是由touch priority来决定的,这个和zorder是完全独立的两套体系。好处是可以比较灵活的调整响应元素的优先级,坏处是开发者需要自己控制各个响应元素的touch priority,需要做一些代码的处理以及前期的优先级规划。touch priority值越小,响应元素的响应优先级越高。这个和zorder刚好相反。

触摸消息分发还有个重要的方面就是消息响应后该触摸消息是不是就不会再传递下去,cocos2d-x中需要自己控制消息是否响应后是否会传递下去。

如果一个CCTouchDelegate被添加至CCTouchDispatcher时,如果设置bSwallowsTouches为true,则当该CCTouchDelegate所在响应元素的ccTouchBegan返回为true时,则触摸消息响应之后就会被吞掉。反之则能继续传递下去。

而且cocos2d-x的消息分发并不会看touch是否发生在响应元素的响应区域范围内与否,只根据priority顺序来传递。例如button无论多小,只要优先级够高,总能最早响应到touch消息。

这套机制我觉得还是做层简单的封装,touch响应优先级基于zorder,响应区域反应基于响应元素响应区域范围,是否吞掉消息则取决于元素本身。

原创粉丝点击