GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

116 信息 294 成员
游戏开发工具 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

 
顺子 大前天 04-24 23:25

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

atk_up = false ;

def_up = false ;

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

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

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

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

是不是太粗暴了……

 
Rusty 前天 04-25 16:13

顺子

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

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

 
顺子 前天 04-25 23:21

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

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

 

加入 indienova

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