Project1

标题: 如何对这段代码进行优化? [打印本页]

作者: jeffice0325    时间: 2020-8-8 09:53
标题: 如何对这段代码进行优化?
本帖最后由 jeffice0325 于 2020-8-8 13:54 编辑

用重载实现的背包容量脚本,但当物品数量众多且进行以下操作:(依次加入1个不同物品,查询剩余容量)时效率很低,请问各位大佬如何优化该代码?
RUBY 代码复制
  1. class Game_Party < Game_Unit
  2.   def all_item_number
  3.     ans = 0
  4.     @items.each{|idx|ans += idx[1]}
  5.     @armors.each{|idx|ans += idx[1]}
  6.     @weapons.each{|idx|ans += idx[1]}
  7.     ans
  8.   end
  9.   def max_item_number(item)
  10.     return 0 unless item_container(item.class)
  11.     return max_all_item_number - all_item_number unless item_container(item.class)[item.id]
  12.     return max_all_item_number - all_item_number + item_container(item.class)[item.id]
  13.   end
  14.   def max_all_item_number
  15.     99
  16.   end
  17.   def item_max?(item)
  18.     all_item_number >= max_all_item_number
  19.   end
  20.   def gain_item(item, amount, include_equip = false)
  21.     container = item_container(item.class)
  22.     return unless container
  23.     container[item.id] = 0 unless container[item.id]
  24.     container[item.id] += [amount,max_item_number(item) - container[item.id]].min
  25.     container.delete(item.id) if container[item.id] <= 0
  26.     if include_equip && container[item] + amount < 0
  27.       discard_members_equip(item, -container[item] - amount)
  28.     end
  29.     $game_map.need_refresh = true
  30.   end
  31. end
  32. class Window_ItemList < Window_Selectable
  33.   def draw_item_number(rect, item)
  34.     draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
  35.   end
  36. end

作者: 芯☆淡茹水    时间: 2020-8-8 13:22

这个是什么意思?
作者: jeffice0325    时间: 2020-8-8 13:55
本帖最后由 jeffice0325 于 2020-8-8 13:57 编辑
芯☆淡茹水 发表于 2020-8-8 13:22
这个是什么意思?


啊这……网络延迟,代码已修复
  1. container[item.id] = 0 unless container[item.id]
复制代码

好像可以优化成
  1. container[item.id] |= 0
复制代码

作者: fux2    时间: 2020-8-8 16:24
没看懂楼主实现的目的,这个all_item_number是什么邪道算法,idx是个数组吗?默认系统下应该就是数量啊
楼主不如直接说需求




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