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

Project1

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

[已经解决] 尝试制作另一套装备系统时遇到关於object=的报错

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1939
在线时间
316 小时
注册时间
2018-3-4
帖子
57
跳转到指定楼层
1
发表于 2018-6-16 23:38:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
事源是想要抄袭默认脚本装备系统来制作另一套装备系统顺便了解一下默认脚本如何运作
靠着各种报错一步步了解结果来到object=的报错卡住
翻找一星期了还是理不清Game_BaseItemGame_ActorWindow_EquipItemScene_Equip之间是如何互动
反而被默认脚本扭成一团的道具系统思路扭成一团了……
所以只好来找大佬求救了呢

其实就想问问这个报错错啥


RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   def force_change_equip(slot_id, item)
  3.     @equips[slot_id].object = item          # ← 报的这里错
  4.     release_unequippable_items(false)
  5.     refresh
  6.   end
  7. end


然後是距离完成还很遥远自制脚本
因为目前还是在完全抄袭默认脚本然後把class名称Equip换成Soul的阶段所以冗长又看似无关的部份就不放上来了
这三段是目前改动里最可疑的部份
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   #--------------------------------------------------------------------------
  3.   # ● 获取装备栏的数组
  4.   #--------------------------------------------------------------------------
  5.   def equip_slots
  6.     return [0,0,2,3,4,5,5,5,5,5,6,6,6,6,7,7,7,8,8,9] if dual_wield?       # 双持武器
  7.     return [0,1,2,3,4,5,5,5,5,5,6,6,6,6,7,7,7,8,8,9]                      # 普通
  8.   end
  9. end
  10.  
  11. class RPG::Armor < RPG::EquipItem
  12.   #--------------------------------------------------------------------------
  13.   # ● 装备类型
  14.   #--------------------------------------------------------------------------
  15.   def etype_id
  16.     @note.include?("<soul>") ? etype_id = 5 : @etype_id
  17.   end
  18. end
  19.  
  20. class Window_SoulItem < Window_ItemList
  21.   #--------------------------------------------------------------------------
  22.   # ● 设置装备栏 ID
  23.   #--------------------------------------------------------------------------
  24.   def slot_id=(slot_id)
  25.     return if @slot_id == slot_id + 5
  26.     @slot_id = slot_id + 5
  27.     refresh
  28.     self.oy = 0
  29.   end
  30. end


制作思路方面是把[0,1,2,3,4]後面的[5,5,5,5,5,6,6,6,6,7,7,7,8,8,9]放到另一个装备页
但是新装备页里的从Window_EquipItem仿制的Window_SoulItem似乎无法……嗯……怎麽说呢……就是应该错了但是无法理解错在哪里的说

求各路大佬围观指点

Lv4.逐梦者 (版主)

梦石
0
星屑
6886
在线时间
7027 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

2
发表于 2018-6-17 00:04:07 | 只看该作者
头痛医头,脚痛治脚:

请配着这个教程食用
https://rpg.blue/forum.php?mod=viewthread&tid=399513

undefined method XXX for YYY class
意思就是调用方法时(YYY类的实例.XXX方法),YYY类并没有定义XXX方法。
在这里,YYY是nil。就是空值。什么情况之下会出空值呢?
其中一个就是数组里并没有这个索引的数值。(例子:array长度3,但是你却尝试array[5])

请检查你的代码运行顺序,确保Game_Actor内force_change_equip方法的第一行
@equips[slot_id].object = item
从@equips提取出来的值不是nil(空值)。

也建议你在这种情况的时候加一个p(需要开启控制台/小黑窗)来检查数据。
例子:
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.       def force_change_equip(slot_id, item)
  3.         p @equips #<- 在控制台输出,检查数据
  4.         p slot_id #<- 检查参数
  5.         @equips[slot_id].object = item
  6.         release_unequippable_items(false)
  7.         refresh
  8.       end
  9.     end

上面的检查,如果确实slot_id比@equips的大小还大,你是需要对@equips数组下手了。

点评

p了一下確定無誤之後才發現原來犯了個低級錯誤 忘了要開新遊戲來讓裝備數組套用新模式的說…… Or2  发表于 2018-6-17 01:53

评分

参与人数 1+1 收起 理由
真紅樂章 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
33434
在线时间
6555 小时
注册时间
2012-5-26
帖子
3178

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

3
发表于 2018-6-17 00:34:37 | 只看该作者
本帖最后由 百里_飞柳 于 2018-6-17 00:36 编辑

Game_BaseItem类只是一个对于$data_items $data_weapons等的一个封装,为了能够进行统一调用的容器类而已
如果你想将它们整合为使用 Game_BaseItem类的对象,可以在方法 .object = 赋值前加上
@equips[slot_id] = Game_BaseItem.new if @equips[slot_id].nil?
这样就先弄了一个空的容器类占位置

不过据我对于默认脚本的研究,@equips应该真的是单纯存的$data_weapons[id]或$data_armors[id],毕竟nil代表这里是空的没装备(在window里绘制时判定了这个nil)
比如 [ $data_weapons[1], nil, nil, $data_armors[1], $data_armors[2] ]

评分

参与人数 1+1 收起 理由
真紅樂章 + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
169
在线时间
13 小时
注册时间
2018-11-22
帖子
4
4
发表于 2018-11-23 10:42:41 | 只看该作者
嘛~虽然帮不上什么忙~但是来和小红报道一下哦~

点评

來一起學習的說 ^.<⌒☆  发表于 2018-11-23 19:56
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
169
在线时间
13 小时
注册时间
2018-11-22
帖子
4
5
发表于 2018-11-23 21:44:38 | 只看该作者
草莓萝莉控上校 发表于 2018-11-23 10:42
嘛~虽然帮不上什么忙~但是来和小红报道一下哦~


一起學習哦~

只是這裏似乎不能夠討論H相關的內容吧~(小聲說)

点评

其实可以用点评呀。  发表于 2018-11-24 14:43
欸~被~被扣分了~因为新注册账号无法私信的说~不是故意的啦~  发表于 2018-11-23 22:57
与问题无关的讨论就不要在提问帖中回复了哦,下次请注意  发表于 2018-11-23 22:27

评分

参与人数 1星屑 -1 收起 理由
VIPArcher -1 ღ( ´・ᴗ・` ) 回复与问题无关 -1警告.

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-8 10:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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