renqi策略卡牌手游《新斗罗大陆》
OMNIDREAMGAMES是一家核心团队在卡牌品类有着超过8年积累的开发商,旗下以《新斗罗大陆》为代表的系列产品累积流水破40亿,用户总数4000万+。
在多年开发过程中,团队也积累了一套游戏优化方案。我将基于团队一款全新的卡牌游戏「omniheros」,和大家分享几个行之有效的卡牌游戏优化方法,以及自己的一些心得。这款游戏目前正在测试阶段,敬请期待!
本文将重点介绍以下6个优化方法:
红点设计:减少判断逻辑重复计算,支持多个显示类型和周期shua新。
音频加速:支持不同音频自定义变速。
ASTC分块压缩:减少内存、tisheng加载速度、更jingque地选择压缩块大小。
性能分级:让高、低端机性能均有tisheng。
动态绘制:减少overdraw、降低drawcall、提高帧率。
小包策略:减少首包包体、tisheng流畅度。
1、红点设计
解决问题
减少判断逻辑重复计算。
红点之间父子关系清晰可见。
支持多种显示类型。
支持周期shua新。
红点树的构想
每个UI需要显示的红点都对应有一个id。
用树结构建立红点与红点之间的层级关系。
使用数据结构,保存红点的激活状态。
红点树的设计
只有叶子节点才有且必须有自己判断逻辑。
叶子节点的判断方法不需要参数或者需要固定的参数。
非叶子节点的红点显示状态取决于他的子节点的显示状态。
业务层只需要关心每个子节点的判断逻辑,何时shua新,shua新时是否需要传参数即可。
红点激活流程
104,105,106,107,108为叶子节点,分别绑定了自己的check方法。
104的check方法里有一个固定传参1,这个参数在每次判断的时候都会传入。
当105在func(2)的判断下从未激活变成了激活,会将状态传给101,101有一个激活状态的子节点,不需要管其他子节点,自己也会变成激活,并将激活状态传给100,而使得100也变成了激活。
当107在func()的判断下变成了未激活,会将状态传给103,103只是根据107的未激活并不能直接决定自己的激活状态,它需要检查其他子节点的状态,所以需要检查108的激活状态,若108是激活的,则自己激活;若108未激活,则自己未激活,并将状态传给100。
如果107检查前和检查后的状态有变化则会将状态传给父节点103,如果没有变化则不用向父节点传递。
参数混合树状结构
叶子节点所需要的参数不固定,即需要动态参数。
非叶节点的子节点需要相同的动态参数。
非叶节点的子节点需要不同的动态参数。
红点激活流程
104,105需要相同的动态参数e1,即101的子节点需要相同的动态参数。
107需要动态参数g1,108需要动态参数g2,即103的子节点需要不同的动态参数。
在动态参数的树结构里,对于叶节点107或者105,没法确定其他兄弟叶节点的参数是否与自己一致,所以这里需要遵循一个原则,只有激活状态可以传给父节点,动态参数不能传。
对于103,子节点需要不同动态参数,所以对于107和108的shua新只能选择各自分别shua新,然后同时将状态传给103。
对于101,子节点需要相同动态参数,所以对于104和105的shua新可以选择各自分别shua新,也可以选择shua新101并且将动态参数传给子节点104和105。
列表结构红点
因为列表每个元素不固定,元素数量不固定,所以没法绑定红点id,即列表的红点处理目前选择自己判断,不走树结构。
红点配置表
id为红点对应id,有些id可能为虚拟id,在UI里没有对应界面。
name为注释。
parent红点的父节点,只有大的根节点没有父节点。
update_type为更新类型:
默认为0前端判断,通过绑定的检查方法判断;
可以设置为1后端判断,因为在登录游戏到主城过程里,部分功能是不需要拉取对应的消息的,那这部分的红点激活状态没法通过数据的逻辑判断,只能靠服务器判断之后将结果返回,等到进入对应功能拉取到该功能信息以后,才接管为绑定的检查方法判断。
refresh_type为shua新类型:
默认0及时shua新,无需标记;
1为登录shua新,每次登录只红一次,标记过后这次登录就不会再红了;
2为每天shua新,每天只红一次,标记过后这天就不会再红了;
3为每周shua新,每周只红一次,标记过后这周就不会再红了。
function_id为功能id,用于红点功能开启判断,减少无效的判断耗时。
priority优先级,在update_type为1时,可以设置优先级让比较简单的判断逻辑先判断,减少后端判断耗时。
show_type为显示类型,配合显示优先级使用,优先级越高先显示,可自由设置每个显示类型对应的显示优先级:
默认0,红色的点;
1为绿色箭头,只显示绿色箭头;
2为满,只显示满;
3为新,只显示新;
-1为任意类型,取决于判断逻辑或子节点传给的显示优先级高的类型。
红点业务开发工作
配置红点id关系表。
在UI上gua载红点显示组件。
绑定红点id的检查方法。
在需要变化的时候shua新红点。
标记红点是否点击过。
2、音频变速
解决问题
音频可以设置变速。
不同音效可自定义不同的变速。
音频变速几种方式
修改底层支持音频变速。
接入wwise引擎。
接入fmod引擎。