Project1
标题: 尝试制作另一套装备系统时遇到关於object=的报错 [打印本页]
作者: 真紅樂章 时间: 2018-6-16 23:38
标题: 尝试制作另一套装备系统时遇到关於object=的报错 事源是想要抄袭默认脚本 的装备系统 来制作另一套装备系统 顺便了解一下默认脚本 是如何运作 的
靠着各种报错 来一步步了解 结果来到object=的报错 就卡住 了
翻找一星期了 还是理不清Game_BaseItem 和Game_Actor 和Window_EquipItem 和Scene_Equip 之间是如何互动 的
反而被默认脚本 那扭成一团的道具系统 把思路 也扭成一团 了……
所以只好来找大佬求救 了呢
其实就想问问这个报错 是错啥
class Game_Actor < Game_Battler
def force_change_equip( slot_id, item)
@equips [ slot_id] .object = item # ← 报的这里错
release_unequippable_items( false )
refresh
end
end
class Game_Actor < Game_Battler
def force_change_equip( slot_id, item)
@equips [ slot_id] .object = item # ← 报的这里错
release_unequippable_items( false )
refresh
end
end
然後是距离完成还很遥远 的自制脚本
因为目前还是在完全抄袭默认脚本 然後把class名称 从Equip 换成Soul 的阶段所以冗长又看似无关 的部份就不放上来了
这三段 是目前改动里最可疑 的部份
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 获取装备栏的数组
#--------------------------------------------------------------------------
def equip_slots
return [ 0 ,0 ,2 ,3 ,4 ,5 ,5 ,5 ,5 ,5 ,6 ,6 ,6 ,6 ,7 ,7 ,7 ,8 ,8 ,9 ] if dual_wield? # 双持武器
return [ 0 ,1 ,2 ,3 ,4 ,5 ,5 ,5 ,5 ,5 ,6 ,6 ,6 ,6 ,7 ,7 ,7 ,8 ,8 ,9 ] # 普通
end
end
class RPG::Armor < RPG::EquipItem
#--------------------------------------------------------------------------
# ● 装备类型
#--------------------------------------------------------------------------
def etype_id
@note .include ?( "<soul>" ) ? etype_id = 5 : @etype_id
end
end
class Window_SoulItem < Window_ItemList
#--------------------------------------------------------------------------
# ● 设置装备栏 ID
#--------------------------------------------------------------------------
def slot_id=( slot_id)
return if @slot_id == slot_id + 5
@slot_id = slot_id + 5
refresh
self .oy = 0
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 获取装备栏的数组
#--------------------------------------------------------------------------
def equip_slots
return [ 0 ,0 ,2 ,3 ,4 ,5 ,5 ,5 ,5 ,5 ,6 ,6 ,6 ,6 ,7 ,7 ,7 ,8 ,8 ,9 ] if dual_wield? # 双持武器
return [ 0 ,1 ,2 ,3 ,4 ,5 ,5 ,5 ,5 ,5 ,6 ,6 ,6 ,6 ,7 ,7 ,7 ,8 ,8 ,9 ] # 普通
end
end
class RPG::Armor < RPG::EquipItem
#--------------------------------------------------------------------------
# ● 装备类型
#--------------------------------------------------------------------------
def etype_id
@note .include ?( "<soul>" ) ? etype_id = 5 : @etype_id
end
end
class Window_SoulItem < Window_ItemList
#--------------------------------------------------------------------------
# ● 设置装备栏 ID
#--------------------------------------------------------------------------
def slot_id=( slot_id)
return if @slot_id == slot_id + 5
@slot_id = slot_id + 5
refresh
self .oy = 0
end
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 似乎无法……嗯……怎麽说呢……就是应该错了 但是无法理解错在哪里 的说
求各路大佬围观指点
作者: RaidenInfinity 时间: 2018-6-17 00:04
头痛医头,脚痛治脚:
请配着这个教程食用
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(需要开启控制台/小黑窗)来检查数据。
例子:
class Game_Actor < Game_Battler
def force_change_equip( slot_id, item)
p @equips #<- 在控制台输出,检查数据
p slot_id #<- 检查参数
@equips [ slot_id] .object = item
release_unequippable_items( false )
refresh
end
end
class Game_Actor < Game_Battler
def force_change_equip( slot_id, item)
p @equips #<- 在控制台输出,检查数据
p slot_id #<- 检查参数
@equips [ slot_id] .object = item
release_unequippable_items( false )
refresh
end
end
上面的检查,如果确实slot_id比@equips的大小还大,你是需要对@equips数组下手了。
作者: 百里_飞柳 时间: 2018-6-17 00:34
本帖最后由 百里_飞柳 于 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] ]
作者: 草莓萝莉控上校 时间: 2018-11-23 10:42
嘛~虽然帮不上什么忙~但是来和小红报道一下哦~
作者: 草莓萝莉控上校 时间: 2018-11-23 21:44
一起學習 哦~
只是這裏似乎不能夠討論H相關的內容吧~ (小聲說)
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1