cocos2d-x中模态对话框的一种实现方式
来源:互联网 发布:零点咨询待遇 知乎 编辑:程序博客网 时间:2024/06/01 09:15
http://blog.csdn.net/wayne5ning/article/details/8713262
问题
典型的对话框包括按钮、表格等可以响应触摸的元素。对话框一般在场景中的最上层。模态对话框是指只有该对话框能够响应触摸操作,而其它层不能响应此操作。
分析
对话框会有两种触摸代理,一种是对话框本身,还有一种是CCMenu。cocos2d-x使用优先级来管理触摸代理,对于同一个触摸,如果有优先级数字更小的代理响应了,则优先级数字更大代理不再响应此触摸。例如,CCMenu的优先级数默认为-128。当模态对话框本身的优先级数比-128小,并且如果此触摸只要被响应了就会会吞噬掉(CCTouchDispatcher::addTargetedDelegate中第三个参数设置为true),则在此对话框中的触摸不会被下一层响应到。
然后,还有个问题是,模态对话框中的按钮也被屏蔽了。因此,解决方式之一是主动调用CCMenu的触摸方法。
解决方式
此模态对话框响应定向触摸(TargetedTouch),优先级数比-128小就行了。重写定向触摸响应方法,包括ModalDialog::ccTouchBegan, ModalDialog::ccTouchEnded, ModalDialog::ccTouchMoved 和 ModalDialog::ccTouchCancelled,并在这些方法中主动调用CCMenu的相应响应方法。需要注意的是,CCMenu在响应ccTouchEnded,ccTouchMoved 和 ccTouchCancelled时需要CCMenu::ccTouchBegan返回真,否则会出现断言错误(见CCMenu中的断言CCAssert(m_eState == kCCMenuStateTrackingTouch, "[Menu ccTouchEnded] -- invalid state");)。因此,如果CCMenu::ccTouchBegan返回为false,则不再响应ModalDialog::ccTouchEnded, ModalDialog::ccTouchMoved 和 ModalDialog::ccTouchCancelled。大致代码如下:
实际使用时,为了扩展性,可以将Menu从外面添加到对话框中。
注:cocos2d-x版本为cocos2d-2.1beta3-x-2.1.1
- cocos2d-x中模态对话框的一种实现方式
- cocos2d-x中模态对话框的一种实现方式
- 一种简单的方式实现Cocos2d-x 2.x版本按层级关系派发Touch事件
- Cocos2d-x 内存管理的一种实现
- Cocos2d-x 内存管理的一种实现
- Cocos2d-x 内存管理的一种实现
- cocos2d-x 模态对话框的实现
- cocos2d-x 模态对话框的实现
- cocos2d-x中实现对话框
- Cocos2d-x内存管理的一种实现 [转]
- COCOS2D-X之帧动画的一种实现Demo
- Cocos2d-X研究之内存管理的一种实现
- Cocos2dx 3.13 “模态对话框”的一种实现方式
- cocos2d-x 弹出对话框的设计与实现
- Cocos2d-x 弹出对话框的设计与实现
- Cocos2d-x 弹出对话框的设计与实现
- Cocos2d-x 弹出对话框的设计与实现
- Cocos2D-X弹出对话框的实现与封装
- 在eclipse环境下编译cmu sphinx4
- SWIFT的风险防范
- C++枚举类型
- TypeError: this constructor takes no arguments
- Install OpenCL on Debian, Ubuntu and Mint orderly
- cocos2d-x中模态对话框的一种实现方式
- Windows XP寿终正寝:我们真的恐慌吗?
- LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Spring中实现文件上传
- UDP 123
- Ubuntu下的绘图软件
- 微软困境:免费时代的落伍者
- js key Event 只允许输入数字处理
- Unity3d用户手册用户指南创建游戏Particle Systems