升级模块读配置的代码设计方案

游戏中设计到升级时,那么肯定有满级配置,读取下一级配置时,当没有满级时,根据index读取下一个配置,没毛病,但是满级的时候,没有下一级配置。最开始的做法是,判断玩家是否满级,如果满级,下一级数据读取当前配置的数据,如果没有满级,下一级的数据读取下一级的数据。这么做虽然也能解决问题,但是这样做的弊端是,语义容易误解,而且还得专门写个方法判断属性是否已经满级。

后来查看了其它大佬的写法,下一级的配置直接根据当前配置来计算下一级配置的索引(当前索引+1 = 下一级配置索引),根据索引找到ID,然后直接根据ID读取配置,读不到配置时,视为已达到最高级,这样做的问题是,读不到配置不一定是最高级,也可能是配置表有问题,但是既然是其它问题导致的这个问题,其它问题解决后这个问题就不存在了,所以是可以这么做的,这样做的好处是简单明了。

下面总结一套涉及到升级读配置的实现方法

1、解析配置表,这个是必须的

封装方法-根据ID读取配置;

封装方法-根据type读取list,并排序(升序或者降序都行,用于判读升级后收到服务器协议时,判断是否升级成功);

封装方法-根据ID获取skin icon

其他的一些方法,比如获取指定type的第一个配置,获取指定type的最后一个配置等等,都不需要了,可以直接根据返回的arr获取第0个或者第arr.length-1个

2、新建一个info类,存储服务器下发的数据,如果数据源唯一(模块只用于玩家本人,则可以直接把收到的服务器数据存进去,在model里面新建变量info进行存储以及调用,记得当没有收到服务器下发数据时,设置默认初始值,因为服务器下发的初始数据其实也是初始值,就没必要让服务器再发了);如果数据源不唯一(模块用于玩家本人和其它玩家,那么能做的就是在info里面初始化的时候,把数据源传进去,再根据传进去的数据源拿想要的数据)

封装方法-指定类型的技能是否学习过

封装方法-当前用于显示的配置表ID

封装方法-指定类型的技能能否升级(道具-等级等要求是否都满足)-更好的方法是每种要求单独判断,因为很可能会根据不满足的条件弹出相应提示

封装方法-获取指定类型已经学习过的技能list并排序(升序或者降序都可以)

封装方法-获取升级要求(道具除外,如玩家等级、其它功能等级等)

封装方法-获取下一级配置的ID(根据当前配置获取当前索引,当前索引+1,读取list,取到下一级配置的ID),没有返回0(没有表示已满级)

3-在一级界面添加item,并设置datasource,每次升级或者打开界面的时候重设datasource数据源,刷新显示,如果需要加特效,可以给特效做延迟添加,但是数据不要延迟处理,因为打开界面的时候,可能还没有完全渲染完,不延迟可能会造成特效位置偏差。添加监听,数据变化时,重设datasource。因为这里在加特效的时候,做了延迟处理,所以在添加特效的时候,还需要在判断一次,能否添加特效,否则会出现问题,玩家点击太快,连续多点几次之后,其实已经不能升级了,但是,特效延迟才加上去,所以会加上之前延迟要加的特效。

4-从1级界面的item处点击打开二级界面时,给二级界面设置datasource,并设置isSelf属性(玩家本人和其它玩家都需要的模块才需要设置这个))

封装public方法setData,渲染界面

添加监听,数据变化时,fresh界面

5-升级后,收到服务器返回的数据时,判断玩家是否升级,升级派发事件,XX升级了。派发事件,数据刷新了。

发布了61 篇原创文章 · 获赞 2 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_22794043/article/details/88114963