最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
特效与NGUI层级问题
在项目开发中,当涉及到较为复杂的界面时,我们常常会使用多个图集。以技能界面为例,通常会将项目中常用的图片存放在共用图集中,这是第一个图集;技能界面独有的元素,像与技能职业相关的背景等,可归为第二个图集;技能图标则单独归类到一个图集中;此外,还有字体图集。一般来说,一个界面按照这样的分类方式,最多需要 4 个图集。
在 NGUI 中,图集之间的处理默认依靠调整控件的 Z 值来区分层级。然而,这种方式存在一定的局限性,它虽然可以调整同一图集中每个控件的 Z 值,但实际效果并不理想。在界面控件较多的情况下,经常会出现图层相互遮挡的问题。而且,当一段时间后需要对界面进行修改时,由于 Z 值调整的复杂性,开发者可能会感到十分崩溃。
针对这个问题,我采用了一种更为有效的方法。在 UIPanel 中,为每一个 Material 添加一个 layer 变量。当处于同一图层时,通过 depth 来决定前后关系;而对于不同图层,则依靠 layer 来决定前后关系。在绘制 UIDrawCall 时,根据 layer 对根节点进行一定的偏移处理。这样一来,我们就可以摆脱 Z 值调整带来的困扰。
如果大家在开发过程中也遇到了图层相关的问题,可以参考我这种处理方式。通过这种方法来处理图层关系,操作简单,在我参与过的多个大型 UI 项目中,还没有遇到无法解决的情况。
下面将上传一张效果图(此处应补充效果图上传相关操作或说明)。
好了,今天关于特效与 NGUI 层级问题就分享到这里。如果大家需要后续的代码,我会在后面的文章中上传。