Project1

标题: [已解决]如何让$Xunzhang_2..$Xunzhang_200全部变量$Xunzhang= [] [打印本页]

作者: 金芒芒    时间: 3 天前
标题: [已解决]如何让$Xunzhang_2..$Xunzhang_200全部变量$Xunzhang= []
本帖最后由 金芒芒 于 2025-1-22 13:42 编辑

如何让$Xunzhang_2..$Xunzhang_200全部变量$Xunzhang= []
作者: soulsaga    时间: 前天 00:41
萌新不懂..说淸楚些
作者: 金芒芒    时间: 前天 00:51
本帖最后由 金芒芒 于 2025-1-22 00:54 编辑
soulsaga 发表于 2025-1-22 00:41
萌新不懂..说淸楚些


想让 $Xunzhang_2 到 $Xunzhang_200 这些变量都被赋值为 []。$Xunzhang_2=[],$Xunzhang_3=[]…$Xunzhang_200=[]
作者: soulsaga    时间: 前天 01:27
本帖最后由 soulsaga 于 2025-1-22 01:31 编辑
金芒芒 发表于 2025-1-22 00:51
想让 $Xunzhang_2 到 $Xunzhang_200 这些变量都被赋值为 []。$Xunzhang_2=[],$Xunzhang_3=[]…$Xun ...


你用eval循环一下不就好了
$全局变量F12不会重置..不要随便用比较好
作者: 金芒芒    时间: 前天 11:48
本帖最后由 金芒芒 于 2025-1-22 12:17 编辑
soulsaga 发表于 2025-1-22 01:27
你用eval循环一下不就好了
$全局变量F12不会重置..不要随便用比较好

只有图片按部就班才可以

这么循环老出现什么安全问题
range = 2..200
Xunzhang_hash = {}
range.each do |num|
  Xunzhang_hash["$Xunzhang#{num}"] = []
end

class EFS_Battler < Game_Character
  attr_accessor :base_atk
  attr_accessor :Xunzhang
  attr_reader :soldier_id

  def initialize(data_id)
    super()
    @soldier_id = data_id
    @Xunzhang = []
    # @Xunzhang = eval("$Xunzhang_"+data_id.to_s)
    # 假设这里需要根据data_id从Xunzhang_hash中获取相关数据
    @Xunzhang = Xunzhang_hash["$Xunzhang#{data_id}"] || []
  end

  def calculate_Xunzhang
    get_Xunzhang_base_atk.truncate
  end

  def get_Xunzhang_base_atk(const = false)
    if const
      Figter_data::BASE_ATK[@soldier_id]
    else
      n = Figter_data::BASE_ATK[@soldier_id]
      @Xunzhang.each do |i|
        next if i.nil?
        n += Xunzhang_data::BASE_ATK
      end
      n
    end
  end
end

1111.png (39.16 KB, 下载次数: 4)

1111.png

2222.png (3 KB, 下载次数: 3)

2222.png

3333.png (25.17 KB, 下载次数: 4)

3333.png

作者: 金芒芒    时间: 前天 13:35
本帖最后由 金芒芒 于 2025-1-22 13:40 编辑
soulsaga 发表于 2025-1-22 01:27
你用eval循环一下不就好了
$全局变量F12不会重置..不要随便用比较好

已经全局佩戴勋章5号了
  1. Xunzhang_hash = Hash.new { |hash, key| hash[key] = [] }
  2. (2..30).each { |num| Xunzhang_hash[num] }

  3. class EFS_Battler < Game_Character
  4.   attr_accessor :base_atk
  5.   attr_accessor :Xunzhang
  6.   attr_reader :soldier_id

  7.   def initialize(data_id)
  8.     super()
  9.     @soldier_id = data_id
  10.     @Xunzhang = []
  11.     @Xunzhang = Xunzhang_hash[data_id] || []
  12.   end

  13.   def add_Xunzhang(medal_id)
  14.     @Xunzhang << medal_id
  15.     # 刷新Xunzhang_hash中对应data_id的值
  16.     Xunzhang_hash[@soldier_id] = @Xunzhang
  17.   end

  18.   def remove_Xunzhang(medal_id)
  19.     @Xunzhang.delete(medal_id)
  20.     # 刷新Xunzhang_hash中对应data_id的值
  21.     Xunzhang_hash[@soldier_id] = @Xunzhang
  22.   end

  23.   def change_Xunzhang(old_medal_id, new_medal_id)
  24.     remove_Xunzhang(old_medal_id)
  25.     add_Xunzhang(new_medal_id)
  26.   end
  27. end
复制代码
  1. battler = EFS_Battler.new(2)
  2. battler.add_Xunzhang(5)
  3. p Xunzhang_hash
复制代码

A111.png (19.39 KB, 下载次数: 4)

A111.png

A222.png (25.32 KB, 下载次数: 3)

A222.png

A333.png (275.31 KB, 下载次数: 4)

A333.png

作者: ppspssss2    时间: 前天 14:22
本帖最后由 ppspssss2 于 2025-1-22 18:36 编辑

是不能直接在变量名字上作编号取名的 必须使用到二维数组
如果要使用多个数字编号的变量要使用到数组 , 而且是数组中的数组   (数组中定义为数组)


先定义一个多编号的数组(名字要自己改)
$Xunzhang_塞了多编号的数组 = []

for i in 2..200  #for循环你懂得,
$Xunzhang_塞了多编号的数组 = []
end #for

说明:
这里再定义数组中的某个号置为数组,
比如 第一次循坏是i = 2 ,
$Xunzhang_塞了多编号的数组[2] = []
一直循环到 $Xunzhang_塞了多编号的数组[200] = []  
那么就这么多个数赋值完成了
$Xunzhang_塞了多编号的数组[2] 是等于你 $Xunzhang_2 的意思
$Xunzhang_塞了多编号的数组[2至200] 的值都变成了[],就不用定义这么多个变量

如果你看脚本全局变量的话
在脚本里事件调用全局变量1的话是 $game_variables[1] 而不是 $game_variables_1
所以使用这种大量编号的情况肯定是使用数组
不过事件里不允许赋与数组,所以通常不知的道的话会被误以为数组不能再赋值为数组

作者: 金芒芒    时间: 前天 14:52
本帖最后由 金芒芒 于 2025-1-22 14:53 编辑
ppspssss2 发表于 2025-1-22 14:22
是不能直接在变量名字上作编号取名的 必须使用到二维数组
如果要使用多个数字编号的变量要使用到数组 , 而 ...


厉害了我的哥,原来的的图片也是这样排列的.我试试

作者: soulsaga    时间: 前天 19:46
本帖最后由 soulsaga 于 2025-1-22 19:53 编辑

找个空白位置插入以下代码
RUBY 代码复制
  1. def Xunzhang(x)
  2.     $Xunzhang[x]||=[]
  3.     end

先进行变量数组初始化$Xunzhang=[]后显示图片时Xunzhang(id)

一步到位




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