cocos2d-x中的模态对话框简单实现

cocos2d-x中没有为我们提供模态对话框的实现,不过有一个分平台来实现的确认对话框的实现CCMessageBox,可以实现的对话框。可是定制性不强,可以当做系统级的提示,但是如果作为游戏中的对话框就显得不那么妥当了!


自定义一个模态对话框需要注意两方面:

一. 触摸事件响应的优先级别

二.易扩展

其实第一点是比较麻烦的一个方面,第二点主要是根据用法的不同而需要的优化设计。


1. 触摸事件响应规则

不论我们初始化一个场景(CCScene),一个层(CCLayer),还是一个精灵(CCSprite),当我们需要监听其触摸事件的时候,都要在其初始化的时候注册到引擎当中,

[cpp]  view plain copy
  1. CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(CCTouchDelegate *pDelegate, int nPriority, bool bSwallowsTouches)  

其中nPriority属性是注册的单位所响应的优先级别,nPriority的值越小,响应的级别越高!我们熟悉的菜单,其响应级别是一个枚举值 -128,也就是cocos2d-x中定义的最高响应级别(当然我们是可以注册为 -129, -130的。。。),这里只是说cocos2d-x中的定义!


2. 设计模态对话框的困难

模态对话框的作用是只允许用户在当前对话框上做操作,也就是说要屏蔽对对话框下层按钮,菜单类的操作!基于这种特性,我们会遇到不知道将nPriority值注册为多少的困惑

(1)注册大于-128的值,根据响应事件的规则,对话框下层中的菜单的优先级别是-128,高于对话框的触摸响应级别,则先响应,这样便无法做到屏蔽对话框下层菜单的操作。

(2)注册小于等于-128的值,根据响应事件的规则,可以屏蔽对话框下层菜单的操作,但是问题来了,对话框层的菜单操作也将失效,这是源于cocos2d-x中CCMenu的机制,即所有的CCMenu对象的优先级都是-128。


3.解决方法

基于以上的困难有两种解决方案:

(1)自定义一个触摸事件响应级别高于普通菜单层的对话框层和“对话框层”,这样由高到底便可响应触摸事件

(2)自定义一个触摸事件响应级别高于普通菜单层的对话框层,当触摸事件发生时,判断触摸事件,事件分发!

第二种方法代码应该比较简单,总结一下

自定义一个继承于CCLayerColor的对话框层(之所以是CCLayerColor,为的是设置个半透明色作为背景,使其看起来更像模态对话框)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值