Project1

标题: 关于一个脚本结构如何优化的疑惑 [打印本页]

作者:  眠     时间: 2019-2-14 16:47
标题: 关于一个脚本结构如何优化的疑惑
遇到个有点微妙的疑问。

正在做一个arpg,实现了这样一个功能:

每次玩家遭受到攻击,都会获取攻击发出者的备注。
由此获知是被什么编号的敌人所攻击,然后进行一个对应的立绘变化的效果。

代码的部分大概是这样:

  1. type = enemy.note #获取到敌人的种类。
  2. if type == 1
  3. (。。。)#对应立绘变化。
  4. if type == 2
  5. (。。。)
  6. if type == 3
  7. (。。。)
  8. 。。。
复制代码


开始没发现问题,但是后来内容越做越多,现在有40种变化。于是有了40个if。
这样每次攻击都执行一次40个if,觉得好像有点不妥。
所以想请教一下大家的经验,一般这种结构会怎么做?

觉得是个有点微妙的问题,但是有点短路。。m-_-m
作者: 灯笼菜刀王    时间: 2019-2-14 16:54
case  when 嘛....
作者: soulsaga    时间: 2019-2-14 17:18
本帖最后由 soulsaga 于 2019-2-14 17:48 编辑

不用IF..直接一行显示对应的立绘就行
显示立绘:"立绘名字"+type.to_s
作者: KB.Driver    时间: 2019-2-14 17:22
三楼的是一个办法,不过即便是这样还是最好将方法与属性放在一个类中。
也就是为角色的类Game_Actor添加一个方法,将这个通过note获取立绘的语句塞进去。
不过在那内部可能还是避免不了这样的if判断。如果你专门把立绘和note联动的话,
就可以直接返回通用前缀+note.to_s这样
作者: 芯☆淡茹水    时间: 2019-2-14 17:44
可以专门写一个 module 方法来获取LOGO名,方便管理,又好修改。
比如
module XXX
  Data = ["泛用敌人攻击图片","类型1敌人攻击图片","类型2敌人攻击图片",
          "类型3敌人攻击图片",,,]
         
  def self.get_logo_name(note)
    return Data[note || 0]
  end
end

获取直接 XXX.get_logo_name(note) 代入参数 note 就行了。
要修改获取的方式,只需要修改 module 方法,就不用在获取的地方改了。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1