赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 73 |
经验 | 0 |
最后登录 | 2019-3-5 |
在线时间 | 18 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 7288
- 在线时间
- 18 小时
- 注册时间
- 2009-7-17
- 帖子
- 1262
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
当一个队伍有2个人或2个人以上时,你选择状态/技能/装备时,会出现“选择某人激活框”。再选择某个人,这时就进入了某人的具体状态/技能/装备窗口。
而此时你按ESC退出,系统会把整个窗口恢复到你第一次进入菜单界面的初始状态,即没有出现“选择某人激活框”。
个人感觉这样很不方便(当时我并不知道在具体的状态/技能/装备窗口时时可以直接切换人物的,汗……)。我认为 初始菜单-->选择某人激活框-->具体的状态/技能/装备窗口,当我处于第3步时,我按ESC,应该返回的是第2步。于是尝试对这部分内容进行修改。
由于我是刚解除rm系列,前天开始的,所以虽然以前有点lua的脚本经验,但是还是碰到了很多麻烦。
在Scene_Menu里面有个start_actor_selection方法,做的事情就是打开“选择某人激活框”,即第2步。
在Scene_Status里面有个return_scene方法,即是在“具体的状态/技能/装备窗口”中安ESC。
return_scene方法本事只有一行代码:$scene = Scene_Menu.new(3)。即重新创建初始菜单,并让选中框出现在第3个选项(即“状态”)上。
所以此时我认为只需要在return_scene方法里面去调用start_actor_selection方法就好了。就是这样:
def return_scene
$scene = Scene_Menu.new(3)
$scene . start_actor_selection
end
结果报错:
NoMethodError: undefined method active = ' for nil:NilClass
问题的原因是此时Scene_Menu里面的方法都还没有执行,还没有定义出start_actor_selection 里面所需要的变量。此时可以在$scene . start_actor_selection 前面加一句$scene . start,便不会报错了。但是你会发现你在推出具体状态窗口的一瞬间,确实有个激活框出现,但是瞬间就被刷掉了。
所以我想问的是:
1. Scene_Menu.new的作用应该是产生一个实例,那为什么此时并没有去定义这个实例中应有变量呢。
2. 可以看出虽然此时并没有定义出变量,但是在一个短暂的时间过后,Scene_Menu里的方法却确实被执行了。请问这是怎么样一个过程呢?
=====================分割线=======================
虽然上诉的问题我没有搞明白,但我想出了一个取巧的办法……
在Scene_Status里的return_scene方法中加入一个全局变量。当然此全局变量需要在Scene_Menu中申明。
在Scene_Menu的第一行:
$testtesttest = 1
在Scene_Status里找到return_scene方法
def return_scene
$scene = Scene_Menu.new(3)
$testtesttest = 1 #新加的全局变量,表明此时是从状态窗口中返回的
end
再在Scene_Menu里面的
def update_command_selection
if $testtesttest == 1 #如果是从状态窗口返回的,则自动进入“选择某人激活框”
start_actor_selection
$testtesttest = 0
else
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
if $game_party.members.size == 0 and @command_window.index < 4
Sound.play_buzzer
return
elsif $game_system.save_disabled and @command_window.index == 4
Sound.play_buzzer
return
end
Sound.play_decision
case @command_window.index
when 0 # 道具
$scene = Scene_Item.new
when 1,2,3 # 技能、装备、状态
start_actor_selection
when 4 # 保存
$scene = Scene_File.new(true, false, false)
when 5 # 结束游戏
$scene = Scene_End.new
end
end
end
end |
|