设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2407|回复: 14

[已经解决] 关于一个脚本结构如何优化的疑惑

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2631
在线时间
1045 小时
注册时间
2015-11-1
帖子
271
发表于 2019-2-14 16:47:35 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
遇到个有点微妙的疑问。

正在做一个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

Lv5.捕梦者

梦石
0
星屑
37749
在线时间
5385 小时
注册时间
2006-11-10
帖子
6545
发表于 2019-2-14 16:54:27 | 显示全部楼层
case  when 嘛....

点评

话说,我听说的,case开销比if更大?  发表于 2019-2-14 17:10
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33138
在线时间
10485 小时
注册时间
2009-3-15
帖子
4756
发表于 2019-2-14 17:18:03 | 显示全部楼层
本帖最后由 soulsaga 于 2019-2-14 17:48 编辑

不用IF..直接一行显示对应的立绘就行
显示立绘:"立绘名字"+type.to_s

点评

那就"立绘名字"+pic_hand.to_s+type.to_s  发表于 2019-2-14 17:54
嗯 用部件合成的。  发表于 2019-2-14 17:44
你说什么..我看不懂..为什么要拼图?难道你的立绘是要合成的?  发表于 2019-2-14 17:38
你提出的方法确实可以用,但是我就要变成手动去拼大量的图片。大概还是不能这样做。  发表于 2019-2-14 17:32
这个方法确实让我觉得灵光一现,直接就决定图片什么的,不过可惜的是,实际我的立绘已经是pic_hand.to_s_foot_to.s_wear.to_s这个样子了。  发表于 2019-2-14 17:31

评分

参与人数 1星屑 +20 收起 理由
VIPArcher + 20 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

发表于 2019-2-14 17:22:26 | 显示全部楼层
三楼的是一个办法,不过即便是这样还是最好将方法与属性放在一个类中。
也就是为角色的类Game_Actor添加一个方法,将这个通过note获取立绘的语句塞进去。
不过在那内部可能还是避免不了这样的if判断。如果你专门把立绘和note联动的话,
就可以直接返回通用前缀+note.to_s这样

点评

其实没有太明白,但是主旨是这样写比较规范吧。  发表于 2019-2-14 17:57
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31843
在线时间
5079 小时
注册时间
2012-11-19
帖子
4877

开拓者

发表于 2019-2-14 17:44:57 | 显示全部楼层
可以专门写一个 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 方法,就不用在获取的地方改了。

点评

↓效果一样,module 的话,一般写在头,改的时候打开就看到。还有就是个人的习惯,尽量少增加/修改游戏对象,一些需要数据在外部处理好直接传递。  发表于 2019-2-14 18:03
曾经我采取的是这种方法,直到要读取的的东西越来越多才发现还是写在Game_Actor里面要比在外面要好。  发表于 2019-2-14 17:56
十分感谢,这个思路确实不错,我在方法的基础上改进了自己的程序了!果然有时请教下论坛的大家也很好啊。  发表于 2019-2-14 17:56

评分

参与人数 2星屑 +30 +1 收起 理由
VIPArcher + 30 我很赞同
fux2 + 1

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-18 21:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表