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

Project1

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

[有事请教] 请教给防具增加一个实例变量时遇到的问题

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
跳转到指定楼层
1
发表于 2023-5-1 20:09:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 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

新增防具实例变量

Lv5.捕梦者

梦石
0
星屑
33203
在线时间
10495 小时
注册时间
2009-3-15
帖子
4756
2
发表于 2023-5-1 20:14:56 | 只看该作者
本帖最后由 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
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
3
 楼主| 发表于 2023-5-1 20:23:37 | 只看该作者
本帖最后由 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
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
4
 楼主| 发表于 2023-5-1 20:32:19 | 只看该作者
soulsaga 发表于 2023-5-1 20:14
你没写def 你的实例变量
def initialize
是重新开始时会执行一次


大神请看这个例子:

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

188.13 KB, 下载次数: 2

防具实例变量

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33203
在线时间
10495 小时
注册时间
2009-3-15
帖子
4756
5
发表于 2023-5-1 20:59:00 | 只看该作者
taeckle 发表于 2023-5-1 20:32
大神请看这个例子:

新加的话似乎不能照原版来写..
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
6
 楼主| 发表于 2023-5-1 21:02:17 | 只看该作者
soulsaga 发表于 2023-5-1 20:59
新加的话似乎不能照原版来写..

是不是在Module RPG里的所有class都不能像我这样来新增实例变量呐?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33203
在线时间
10495 小时
注册时间
2009-3-15
帖子
4756
7
发表于 2023-5-7 13:55:45 | 只看该作者
taeckle 发表于 2023-5-1 21:02
是不是在Module RPG里的所有class都不能像我这样来新增实例变量呐?


可能要加上
RUBY 代码复制
  1. def zhongliang
  2. return @zhongliang
  3. end
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6301
在线时间
1104 小时
注册时间
2015-8-15
帖子
658
8
发表于 2023-5-7 17:02:46 | 只看该作者
本帖最后由 金芒芒 于 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, 下载次数: 6)

变量.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2431
在线时间
163 小时
注册时间
2020-8-9
帖子
106
9
发表于 2023-5-7 20:54:52 | 只看该作者
你只在初始化的时候给装备赋予重量的值,在你重写这个方法前获取的装备因为当时的初始化方法没有这个值相关的操作,所以你在获取的时候值自然是nil,你这样新增是可以的,你能获取到nil这个值就是证明,但是你没有给你已经拥有的装备赋这个变量的值,只需要在开始游戏的时候用一个方法遍历装备数组给所有装备重新赋值就可以了,以后产生的新准备则不需要再重新赋值,因为你在初始化方法里已经赋了值。

点评

明白了!感谢!  发表于 2023-6-2 22:07

评分

参与人数 1+1 收起 理由
taeckle + 1 感谢!

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
50 小时
注册时间
2020-2-16
帖子
103
10
发表于 2023-6-19 16:31:15 | 只看该作者
我是这么做的
  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
复制代码
流飘零半生,未逢明主。公若是不弃,流愿拜为义父
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-1 23:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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