Project1

标题: 请教给防具增加一个实例变量时遇到的问题 [打印本页]

作者: taeckle    时间: 2023-5-1 20:09
标题: 请教给防具增加一个实例变量时遇到的问题
本帖最后由 taeckle 于 2023-5-1 20:40 编辑

大家好,

神明共鉴,RPG Maker Xp默认脚本会从数据库读取所有防具的数据, 现在我想给防具增加一个实例变量"重量", 我是这么写的, 结果却没有达到我想要的效果:
  1. module RPG
  2.   class Armor
  3.     attr_accessor :zhongliang
  4.     alias al_initialize initialize
  5.     def initialize
  6.       al_initialize      
  7.       @zhongliang = 100 #这里我打算给所有防具增加一个实例变量"重量",先让所有防具的重量值是100
  8.     end
  9.   end  
  10. end
复制代码


然后看了下 @芯☆淡茹水 大神的写法:
  1. class RPG::EquipItem < RPG::BaseItem
  2.   def bian_liang
  3.     return @bian_liang || 100
  4.   end
  5.   def bian_liang=(n)
  6.     @bian_liang = n
  7.   end
  8. end
复制代码


按照@芯☆淡茹水 大神的写法把"bian_liang"改成"zhongliang"效果就出来了,可为什么我写的却没有效果呐?

新增一个防具实例变量.rar

188.13 KB, 下载次数: 1

新增防具实例变量


作者: soulsaga    时间: 2023-5-1 20:14
本帖最后由 soulsaga 于 2023-5-1 20:20 编辑

你没写def 你的实例变量
def initialize
是重新开始时会执行一次
如果在这里加变量旧存档就不能读

RUBY 代码复制
  1. module RPG
  2.   class Armor
  3.     attr_accessor :zhongliang
  4.     def zhongliang   
  5.       return @zhongliang || 100 #这里我要给所有防具增加一个实例变量"重量",初始值是100
  6.     end
  7.   end  
  8. end

作者: taeckle    时间: 2023-5-1 20:23
本帖最后由 taeckle 于 2023-5-1 21:00 编辑
soulsaga 发表于 2023-5-1 20:14
你没写def 你的实例变量
def initialize
是重新开始时会执行一次


按照我自己上面的写法我就是想让其在游戏重新开始生效的, 为此咱还特意把这段代码放到了Game_Temp的上面, 结果当我想在class Game_Actor的def initialize中调用下$data_armors[2].zhongliang时神奇的事情出现了:
1.这个$data_armors[2].zhongliang不会报错
2. 但这个$data_armors[2].zhongliang显示的值不是100,而是nil
作者: taeckle    时间: 2023-5-1 20:32
soulsaga 发表于 2023-5-1 20:14
你没写def 你的实例变量
def initialize
是重新开始时会执行一次


大神请看这个例子:

新增一个防具实例变量.rar

188.13 KB, 下载次数: 2

防具实例变量


作者: soulsaga    时间: 2023-5-1 20:59
taeckle 发表于 2023-5-1 20:32
大神请看这个例子:

新加的话似乎不能照原版来写..
作者: taeckle    时间: 2023-5-1 21:02
soulsaga 发表于 2023-5-1 20:59
新加的话似乎不能照原版来写..

是不是在Module RPG里的所有class都不能像我这样来新增实例变量呐?
作者: soulsaga    时间: 2023-5-7 13:55
taeckle 发表于 2023-5-1 21:02
是不是在Module RPG里的所有class都不能像我这样来新增实例变量呐?


可能要加上
RUBY 代码复制
  1. def zhongliang
  2. return @zhongliang
  3. end

作者: 金芒芒    时间: 2023-5-7 17:02
本帖最后由 金芒芒 于 2023-5-7 17:08 编辑

再加个定义=变量  描述是说明里+@ 你也可以在名称里@
  1.   class Armor#防具类

  2.     def description #定义描述
  3.       #描述 = @描述拆分(/@/)[0]
  4.       des = @description.split(/@/)[0]
  5.       #返回描述 != nil ? 描述 : ""
  6.       return des != nil ? des : ""
  7.     end
  8.     # 防具装备所需各种 能力值
  9.     def need_lv#定义所需的等级
  10.       #需要新的等级 = @描述拆分(/@/)[1]
  11.       need_lv  = @description.split(/@/)[1]
  12.       ##返回需要新的等级!= nil ?需要新的等级到i : 1
  13.       return need_lv != nil ? need_lv.to_i : 1
  14.     end
  15.    
  16.     def need_str#定义需求新的力量
  17.      #需要新的力量 = @描述拆分(/@/)[2]
  18.       need_str  = @description.split(/@/)[2]
  19.        #返回需要新的力量!= nil ?需要新的力量到i : 0
  20.       return need_str != nil ? need_str.to_i : 0
  21.     end
  22.    
  23.     def need_dex#定义需要新的灵巧
  24.       #需要新的灵巧 = @描述拆分(/@/)[3]
  25.       need_dex  = @description.split(/@/)[3]
  26.       #返回需要新的灵巧!= nil ?需要新的灵巧到i : 0
  27.       return need_dex != nil ? need_dex.to_i : 0
  28.     end
  29.    
  30.     def need_agi#定义需要新的速度
  31.       #需要新的速度 = @描述拆分(/@/)[4]
  32.       need_agi  = @description.split(/@/)[4]
  33.        #返回需要新的速度!= nil ?需要新的速度到i : 0
  34.       return need_agi != nil ? need_agi.to_i : 0
  35.     end
  36.    
  37.     def need_int#定义需要新的魔力
  38.       #需要新的魔力 = @描述拆分(/@/)[5]
  39.       need_int  = @description.split(/@/)[5]
  40.       #返回需要新的魔力!= nil ?需要新的魔力到i : 0
  41.       return need_int != nil ? need_int.to_i : 0
  42.     end
  43.    
  44.   end
复制代码

变量.png (46.64 KB, 下载次数: 35)

变量.png

作者: 939034448    时间: 2023-5-7 20:54
你只在初始化的时候给装备赋予重量的值,在你重写这个方法前获取的装备因为当时的初始化方法没有这个值相关的操作,所以你在获取的时候值自然是nil,你这样新增是可以的,你能获取到nil这个值就是证明,但是你没有给你已经拥有的装备赋这个变量的值,只需要在开始游戏的时候用一个方法遍历装备数组给所有装备重新赋值就可以了,以后产生的新准备则不需要再重新赋值,因为你在初始化方法里已经赋了值。
作者: 轩辕合流    时间: 2023-6-19 16:31
我是这么做的
  1. module RPG
  2.   class Armor
  3.     attr_accessor :zhongliang
  4.     alias al_initialize initialize
  5.     def initialize
  6.       al_initialize      
  7.       @zhongliang = 100 #这里我打算给所有防具增加一个实例变量"重量",先让所有防具的重量值是100
  8.     end
  9.   end  
  10. end
  11. # 在Scene_Title
  12. for i in 1...$data_items.size
  13.   $data_items[i].zhongliang = 0
  14. end
  15. -------------------------------------------
  16. # 或者
  17. $items_zhongliang = [1,2,3,4,56,44,13]
  18. for i in 1...$data_items.size
  19.   $data_items[i].zhongliang = $items_zhongliang[i]
  20. end

  21. # 不过默认脚本没有存档$data_items的功能 我是这么做的,继续按照上面的方式
  22. # 在存档的时候 $game_variables[1000] =$items_zhongliang  
  23. # 在读档的时候
  24. $items_zhongliang   =  $game_variables[1000]
  25. # 又或者直接用 $game_variables[1000]来之定相应物品的zhongliang
复制代码





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