Project1

标题: 还是关于公共变量的问题 [打印本页]

作者: 兔毛鹿    时间: 2015-10-8 14:39
标题: 还是关于公共变量的问题
搜到一个脚本,可以设置一个编号的变量为公用变量,那么如果我想设置编号为63、64、65的三个变量为公共变量,应该怎么修改脚本呢?
  1. class Game_Variables
  2.   FileVariablesID1 = 63
  3.   #--------------------------------------------------------------------------
  4.   # ● 初始化
  5.   #--------------------------------------------------------------------------
  6.   def initialize
  7.     @data = []
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   # ● 获取变量
  11.   #     variable_id : 变量 ID
  12.   #--------------------------------------------------------------------------
  13.   def [](variable_id)
  14.     if variable_id == FileVariablesID1
  15.       begin
  16.         val = load_data("TempVariables.rxdata")
  17.       rescue Errno::ENOENT
  18.         save_data(0, "TempVariables.rxdata")
  19.         retry
  20.       end
  21.       return val
  22.     end
  23.     if variable_id <= 5000 and @data[variable_id] != nil
  24.       return @data[variable_id]
  25.     else
  26.       return 0
  27.     end
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 设置变量
  31.   #     variable_id : 变量 ID
  32.   #     value       : 变量的值
  33.   #--------------------------------------------------------------------------
  34.   def []=(variable_id, value)
  35.     if variable_id <= 5000
  36.       @data[variable_id] = value
  37.     end
  38.     if variable_id == FileVariablesID1
  39.       save_data(@data[variable_id], "TempVariables.rxdata")
  40.     end
  41.   end
  42. end
复制代码

作者: 无忧谷主幻    时间: 2015-10-8 15:18
看看行不行
class Game_Variables
  FileVariablesID1 = 63,64,65
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize
    @data = []
  end
  #--------------------------------------------------------------------------
  # ● 获取变量
  #     variable_id : 变量 ID
  #--------------------------------------------------------------------------
  def [](variable_id)
    if variable_id == FileVariablesID1
      begin
        val = load_data("TempVariables.rxdata")
      rescue Errno::ENOENT
        save_data(0, "TempVariables.rxdata")
        retry
      end
      return val
    end
    if variable_id <= 5000 and @data[variable_id] != nil
      return @data[variable_id]
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置变量
  #     variable_id : 变量 ID
  #     value       : 变量的值
  #--------------------------------------------------------------------------
  def []=(variable_id, value)
    if variable_id <= 5000
      @data[variable_id] = value
    end
    if variable_id == FileVariablesID1
      save_data(@data[variable_id], "TempVariables.rxdata")
    end
  end
end

作者: 兔毛鹿    时间: 2015-10-8 15:32
无忧谷主幻 发表于 2015-10-8 15:18
看看行不行

改成这样一个变量都保存不了,新建游戏就全部归零了
作者: 冰水金刚    时间: 2015-10-8 15:33
本帖最后由 冰水金刚 于 2015-10-8 21:43 编辑

RUBY 代码复制
  1. $valh = {}
  2. class Game_Variables
  3.   FileVariablesID1 = [63,64,65]
  4.   #--------------------------------------------------------------------------
  5.   # ● 初始化
  6.   #--------------------------------------------------------------------------
  7.   def initialize
  8.     @data = []
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ● 获取变量
  12.   #     variable_id : 变量 ID
  13.   #--------------------------------------------------------------------------
  14.   def [](variable_id)
  15.     FileVariablesID1.each do |i|
  16.       if variable_id == i
  17.         begin
  18.           valh = load_data("TempVariables.rxdata")
  19.           val = valh[i]
  20.         rescue Errno::ENOENT
  21.           valh={}
  22.           for i in FileVariablesID1.each
  23.              valh[i]=0
  24.           end
  25.           save_data(valh, "TempVariables.rxdata")
  26.           retry
  27.         end
  28.         return val
  29.       end
  30.     end
  31.     if variable_id <= 5000 and @data[variable_id] != nil
  32.       return @data[variable_id]
  33.     else
  34.       return 0
  35.     end
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 设置变量
  39.   #     variable_id : 变量 ID
  40.   #     value       : 变量的值
  41.   #--------------------------------------------------------------------------
  42.   def []=(variable_id, value)
  43.     if variable_id <= 5000
  44.       @data[variable_id] = value
  45.     end
  46.     n = 0
  47.     FileVariablesID1.each do |i|
  48.       if variable_id == i
  49.         $valh[i]=@data[variable_id]
  50.         n+=1
  51.       end
  52.     end
  53.     if n > 0
  54.       save_data($valh, "TempVariables.rxdata")
  55.     end
  56.   end
  57. end

作者: 兔毛鹿    时间: 2015-10-8 15:50
本帖最后由 兔毛鹿 于 2015-10-8 15:51 编辑
冰水金刚 发表于 2015-10-8 15:33
class Game_Variables
  FileVariablesID1 = [63,64,65]
  #-------------------------------------------- ...


我通过事件给变量赋值的时候就报错:脚本的47行发生了 LocalJumpError。  no block given
作者: 冰水金刚    时间: 2015-10-8 18:32
本帖最后由 冰水金刚 于 2015-10-8 18:43 编辑

把for i in FileVariablesID1a.each
全换成FileVariablesID1.each do |i|
作者: 兔毛鹿    时间: 2015-10-8 19:23
冰水金刚 发表于 2015-10-8 18:32
把for i in FileVariablesID1a.each
全换成FileVariablesID1.each do |i|

这样改了以后测试给三个变量赋值,只有第三个变量是正确的,前两个变量都是nil
作者: 夜狠简单    时间: 2015-10-8 22:01
本帖最后由 夜狠简单 于 2015-10-8 22:04 编辑

重新进入游戏后读取不到




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