GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

189 信息 1069 成员
游戏开发工具 GameMaker Studio 2 的讨论小组

[求教]请问基于回合制的buff和debuff的实现,是否有比较便捷的方式?

Rusty 2018-04-16

如题,个人在尝试做一款基于回合制的游戏,因为会涉及到大量的buff和debuff,按照我目前粗略的想法,是在player和enemy的parent的create event中创建个名为buff的ds_map,并在step event中检测ds_map是否包含某项buff,如atk_up,def_up等,当然某些角色特有的buff会放在具体的obj的step里,然后具体呈现在角色上的特效,就在draw事件里判断并绘制了。虽然也能够实现,但感觉这个想法的开发效率和维护效率不太高……

不知道哪位大佬有比较高效或者便于维护的实现方式?感谢指教0.0

近期喜欢的会员

 
顺子 2018-04-24

直接写个buff声明脚本,把公用的buff写进去

atk_up = false ;

def_up = false ;

然后再双方parent的create事件里调用声明这一堆buff

然后在buff或debuff被触发的时候直接把值设为true去判断?

要维护buff类型的时候就来改这个脚本

独有的buff就单开一个脚本存?

是不是太粗暴了……

 
Rusty 2018-04-25

顺子

脚本在声明上比较方便,不过触发判定还是会分布在各个不同的事件里,比如被敌人攻击触发,还是自己用某技能触发,或者踩到某个地形触发,感觉不太利于后面的维护,不过看了下几个教程视频,貌似也没有特别提到,看来只能自己留个说明文档之类的以免以后自己都忘记了……

另,前些天研究了下,因为buff一般都有持续回合的,所以感觉判断buff生效与否用数字会比较便捷,create里声明buff=0,触发时buff = buff持续回合 + 当前回合,当buff>当前回合时判断buff生效,这样就可以省去依据当前回合判断是否把buff改回false的步骤了。

 
顺子 2018-04-25

Rusty 具体触发肯定是分散在不同的事件里的,感觉就算用ds map也没法解决这个问题吧,如果想进一步统一处理感觉要再抽象一个脚本“状态处理”,然后所有需要变更状态的地方统一调用这个脚本,然后在这个脚本里对传入的参数进行判断来设置具体的状态

用数字来标识buff+回合数感觉是会省事,但是这样有点耦合吧,如果后面突然有什么新的设定需要修改(比如状态不是单纯受回合影响时长了),那可能就会有点麻烦,虽然没做过这种东西,但我觉得还是宁可分开麻烦一点可能会好一点

 
aventzero 2018-08-08
你可以把每个状态变成一个obj,然后这个obj作用于一个目标对象,为这个obj创建一个有限状态机直到它销毁
 
aventzero 2018-08-08
aventzero 这样子的好处是,状态图标也能一起draw了,可以在中招的对象头顶,或者散布在身体上,然后设置一个初始时间计数器,在create时候初始化,例如30S,step里面每过1s对目标的instance造成伤害,或者让他的HP.减半等等,时间到了就destory
 

底特律:变人 中文配音   美茨声音工作室制作   https://www.bilibili.com/video/av28893473/

 
Rusty 2018-08-13

aventzero 您的这个思路可能有一点比较麻烦,每个obj都需要指定一个对象独立计算,这样反而没有了做成一个obj的好处。个人感觉还是直接在父类对象里实现更轻松。当初思路不够开阔,现在想想这个问题,如果是为了方便管理的话,统一写成script归类到一个名为buff组里,再调用出来,就不容易忘记了。

 
kin0lz 2018-10-04

用一个有序数组来存储人物身上的buff和debuff(其实可以把这两种buff一视同仁)。每当新增buff或者debuff的时候,对数组进行修改,并且根据buff的类型来决定是否重新遍历数组。一般当buff的效果会修改某些属性时,需要重新遍历buff数组以重新计算人物的属性。

 
kin0lz 2018-10-04

而某些buff除了修改人物的属性,还会带来一些其他的效果(如身边环绕可以攻击敌人的飞球,每过几秒钟就掉血之类的),这类buff属于特殊buff,依然要把buff的标签和相关属性存入数组,在遍历数组的时候会根据不同的标签进行特殊的处理。某些buff也可以创建新的obj。总之你要有把buff统一存储,统一管理的思想。

 
kin0lz 2018-10-04

最后,别忘了给你的buff确定优先级。比如,对属性的修改,加减是在乘除之前还是之后,普通buff和特殊buff(创建obj的buff)哪个先执行之类的问题。

 
kin0lz 2018-10-04

啊对了,还要做一个buff计时器,这个就很简单了,思路和上述类似

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册