白天,不对,应该是昨天上午,我发了个求助帖,由于不在家里没法上传自己的代码。暂时不方便开源,就打包技能这一部分上来求教下大佬我该怎么设计?我觉得我现在的写法很Low而且感觉写得很复杂,第一次做传统游戏,希望有大佬帮忙讲解一下
我的构思:我希望做一个技能系统,把每个技能当作单独的组件,Hero单位有一个专门的节点来挂载对应的技能。然后游戏本体是3x3的回合制游戏,每回合开始,每个Hero会获得不定量的能量,当Hero能量槽满的时候会分两个阶段去检测技能:一个就是回合开始的时候,多为BUFF类技能,就像已设计好的空城一类;另一个就是轮到自己行动的时候,这时候会先判断是否满能量槽,然后会判断时候有对应类型的技能能够施放,否则就普通攻击。
大概思路就是这样,希望有大佬能多多眼熟我,给我些建议,感激不尽
skill.zip (5.5 KB)
用中文描述施法过程(要求具体可执行),概念抽象,代码编写。
这种设计不出来,通常就是概念没定义好。
技能系统 == buff系统 + 时间系统 + 数据。 把技能细分开变成buff,buff+定时器+数据就能组装一个新的技能
确实,比如原本想的攻击一行的技能,原本想的是攻击同一行,在做的时候突然想到,如果同一行没有目标怎么办?还有攻击一排最初也是攻击123排,也是想到了123排如果不存在怎么处理,然后把一个参数选取规则拆分成了两个参数,一个参数表选取规则,另一个表选取数量(目前只设计了选取一个还是全部)
因为是回合制,所以我没用到时间相关,只是区分了状态。然后也做了个BUFF
前年做过类似的,但我主要做的是服务器,客户端相对来说简单点,客户端我们是弄了三张配置表1:怪物/英雄所对应的技能2:技能表 (播放次数,轴心点,缩放,会产生的buffer,效果对象)2:buffer表 持续几回合,轴心点 …这三个表就能实现所有的,特殊buff特殊技能可以单独特殊处理(反弹,转移伤害,无敌几回合,效果对象)…客户端只要显示跟服务器一致的技能与buff,其他都叫个服务器(我们之前是每回合客户端请求服务器,服务器会返回下一回合的技能buff等)
捕获前端论坛里的后端大佬。。。。
我这不弄怪物,三国背景的,技能按武将统一(其实就是懒,一个都做不好还做两个就太异想天开了)。
那你们这施放技能的话是后端把相关数据都发给前端?施放技能、施法单位、施法目标、伤害or效果?
看了一下你的代码,还可以,基本上技能系统就是这么做的。把技能里面涉及到的各个部件拿出来作为一个数据表头,然后这些不同的部件可以组合成不同的技能。这种情况下,有switch是难免的。
但是有一点问题的地方在于,数据层和表现层最好分开,遍历目标的时候直接遍历cc.Node然后getComponent这样会有性能问题。
数据怎么发,这个不一定。这里要分为判定和结算两部分,有些游戏都放客户端,有些判定放客户端结算放服务端,还有都放服务端的。技能本身的静态数据,一般是通过客户端热更来强制客户端和服务端的数据保持一致。
那这里是对象存个自己的技能组件数组去遍历?
或者用一个全局的按触发时机分类的技能组件数组管理,然后技能组件里增加一个持有对象这样方便调用?
不是,技能组件里面不应该持有任何目标对象。在技能系统之外,应该有一个全局的entity管理器,这个管理器里面只保留数据,不存Node,然后在技能组件里面getTarget的时候根据entity管理器的数据来查询,避免频繁的getComponent
其实本质上,这是一个数据和表现分离的设计问题。
数据和表现分离这块我一直做不好,这块我得再构思一下,感谢提供思路,我继续试试
当然其实在你目前的项目里面,总共才3*3,也没几个节点。。直接遍历可能也还好
目前是这样的,空了也得研究下这个方向
这个技能系统就是战斗系统吧 ?
算是一部分吧,整体还有些其他的