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

Project1

 找回密码
 注册会员
搜索
查看: 14089|回复: 68
打印 上一主题 下一主题

[原创发布] 【教程】【不定期更新】实用型XP脚本编写小技巧#13

[复制链接]

Lv1.梦旅人

路人党员

梦石
0
星屑
51
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
1
发表于 2015-1-19 10:18:07 | 显示全部楼层
本帖最后由 英顺的马甲 于 2015-1-19 10:51 编辑

很多时候与其重定义method不如重定义变量

额...好吧,就放个例子
https://rpg.blue/forum.php?mod=r ... 990&pid=2575524
与其
RUBY 代码复制
  1. class Game_Party
  2.   def item_number(id)
  3.     @items[@actors[0].id] ? (@items[@actors[0].id].include?(id) ? @items[@actors[0].id][id] : 0) : 0
  4.   end
  5.   def weapon_number(id)
  6.     @weapons[@actors[0].id] ? (@weapons[@actors[0].id].include?(id) ? @weapons[@actors[0].id][id] : 0) : 0
  7.   end
  8.   def armor_number(id)
  9.     @armors[@actors[0].id] ? (@armors[@actors[0].id].include?(id) ? @armors[@actors[0].id][id] : 0) : 0
  10.   end
  11.   def gain_item(id, n)
  12.     @items[@actors[0].id] = {} unless @items[@actors[0].id]
  13.     if item_id > 0
  14.       @items[@actors[0].id][id] = [[item_number(id) + n, 0].max, 99].min
  15.     end
  16.   end
  17.   def gain_weapon(id, n)
  18.     @weapons[@actors[0].id] = {} unless @weapons[@actors[0].id]
  19.     if id > 0
  20.       @weapons[@actors[0].id][id] = [[weapon_number(id) + n, 0].max, 99].min
  21.     end
  22.   end
  23.   def gain_armor(id, n)
  24.     @armors[@actors[0].id] = {} unless @armors[@actors[0].id]
  25.     if id > 0
  26.       @armors[@actors[0].id][id] = [[armor_number(id) + n, 0].max, 99].min
  27.     end
  28.   end
  29. end

不如
RUBY 代码复制
  1. class Bag
  2.   def initialize
  3.     @data = {}
  4.   end
  5.   def method_missing(name, *args, &block)
  6.     @data[$game_party.actors[0].id] ||= {}
  7.     begin
  8.       @data[$game_party.actors[0].id].send(name, *args, &block)
  9.     rescue Exception
  10.       raise($!.class, $!.message, caller)
  11.     end
  12.   end
  13. end
  14. class Game_Party
  15.   alias multi_bag_init initialize unless defined?(multi_bag_init)
  16.   def initialize
  17.     multi_bag_init
  18.     @items = Bag.new
  19.     @weapons = Bag.new
  20.     @armor = Bag.new
  21.   end
  22. end

点评

就三个方法就上 method_missing 大法啊= = 话说 @armors 少写了一个 s。另外 Game_Actor 没有定义 hash 方法,所以可以直接拿来做哈希表的键(少打几个字-_-)  发表于 2015-2-8 21:15
第二种方法还能把冲突降到最低  发表于 2015-1-19 20:32
第一种方法实际上更改了原有背包信息的储存方式,所以它改了方法和变量结构。第二种方法是直接引入新的结构,自然要比第一种要好。  发表于 2015-1-19 20:00
其实我想要说的是多背包脚本...  发表于 2015-1-19 10:38
其实就是你的那个“装备附带技能”脚本让我坚信了改脚本要改method的想法。话说我还想把你那篇帖子引用到这里呢  发表于 2015-1-19 10:20

评分

参与人数 1星屑 +60 收起 理由
RyanBern + 60 吃糖了

查看全部评分

本人擅长XP,如果有脚本或者Ruby方面的问题欢迎发电邮到[email protected]咨询,本人很少检查电邮所以不一定会及时回复,本人不会直接出手解决问题只会提供一个方向,所以谢绝伸手党
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-3 00:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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