Project1
标题:
忍不住问一个很白痴的问题
[打印本页]
作者:
hhwknight
时间:
2010-6-28 01:21
标题:
忍不住问一个很白痴的问题
本帖最后由 hhwknight 于 2010-6-28 18:16 编辑
在不改动源程序任何脚本的情况下,运行游戏后,打开菜单,点开物品栏,然后光标停在一个道具上时,此时@item.id这个变量的值是多少?
作者:
hhwknight
时间:
2010-6-28 01:34
按道理来讲,我觉得,应该是此时光标所停的道具的id编号才对,可是为什么我把这个值引用出来的时候始终是1?
作者:
紫苏
时间:
2010-6-28 01:45
不知道是你引用错了还是什么,在 Windows_Selectable 的以下一段中添加红色部分,就能看到在物品栏中按下方向键右时物品编号的变化:
# 方向键右被按下的情况下
if Input.repeat?(Input::RIGHT)
p self.item.id if self.class == Window_Item
# 列数为 2 以上并且、光标位置在(项目数 - 1)之前的情况下
if @column_max >= 2 and @index < @item_max - 1
# 光标向右移动
$game_system.se_play($data_system.cursor_se)
@index += 1
end
end
作者:
hhwknight
时间:
2010-6-28 01:52
本帖最后由 hhwknight 于 2010-6-28 02:40 编辑
回复
紫苏
的帖子
辛苦了辛苦了,我去试了,确实出来的是物品id号码,不是1。
我是在公共事件中写了这么几句
if $game_actors[1].level==$game_actors[@item.id].level
$game_temp.message_text =
"等级不够,无法召唤。"
end
然后给一个道具调用了这个事件。于是总出现上面那句话....这是什么原因呢?
补充:道具调用这个公共事件的方法是当使用该道具时,即按下确认键时。(貌似是废话)
再补充:上面脚本中$game_actors[1].level的值是1,即1号主角等级1,我引用的34号道具,34号主角的等级是15,如果此时@item.id=34的话,上面那句话应该不会出现才对啊
最后补充:我郁闷了,刚刚用p命令测出此时@item.id值竟然是4?郁闷,想不通了,睡觉去。。。。。残念。。。。
作者:
紫苏
时间:
2010-6-28 03:06
原来你是这么干的 =w=
你用事件写的脚本,其上下文是在 Interpreter 这个类的实例上下文中,而该上下文中并没有 @item 这个实例变量,所以引用 @item 的话就会引用到 nil,@item.id 也就成了 nil.id,这时 ID 就被路由·到 Object#id 方法了,也就是 Ruby 对象的唯一标识,那么 nil 这个单例的唯一标识永远是 4,即是说 $game_actors[@item.id] 实际上会被重写为 $game_actors[4]
你可以在 Scene_Item 里找到所有 if @item.common_event_id > 0 的分歧,然后在分歧下用全局变量记录 @item.id,然后在公共事件中引用
作者:
hhwknight
时间:
2010-6-28 18:02
回复
紫苏
的帖子
明白了,太感谢了。。。刚刚试了,已经成功引用。
感激涕零~~~
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1