Project1
标题: 如何在菜单中设置读档功能 [打印本页]
作者: 八神和麻 时间: 2012-12-9 18:51
标题: 如何在菜单中设置读档功能
本帖最后由 八神和麻 于 2012-12-9 22:31 编辑
综上所述,就是按X调出菜单后,如何在功能中加入“读档”功能呢?
作者: acn00269 时间: 2012-12-9 19:45
#原作者:吾不知
#使用方法:插在Main以上即可
class Window_MenuCommand < Window_Command
alias load_add_main_commands add_main_commands
def add_main_commands
load_add_main_commands
add_command("读档", :Load, main_commands_enabled)
end
end
class Scene_Menu < Scene_MenuBase
alias load_create_command_window create_command_window
def create_command_window
load_create_command_window
@command_window.set_handler(:Load, method(:Load))
end
def Load
SceneManager.call(Scene_Load)
end
end
#原作者:吾不知
#使用方法:插在Main以上即可
class Window_MenuCommand < Window_Command
alias load_add_main_commands add_main_commands
def add_main_commands
load_add_main_commands
add_command("读档", :Load, main_commands_enabled)
end
end
class Scene_Menu < Scene_MenuBase
alias load_create_command_window create_command_window
def create_command_window
load_create_command_window
@command_window.set_handler(:Load, method(:Load))
end
def Load
SceneManager.call(Scene_Load)
end
end
相当简单的,自己也可以尝试调一下
作者: zsf84510502 时间: 2012-12-14 17:17
acn00269 发表于 2012-12-9 19:45
#原作者:吾不知
#使用方法:插在Main以上即可
问一下,我小白,具体查到那个main前面? 我试验了半天了,不是游戏报错,要不就是菜单报错,要不就是一点关系都没有。谢谢了
作者: zsf84510502 时间: 2012-12-14 17:45
acn00269 发表于 2012-12-9 19:45
#原作者:吾不知
#使用方法:插在Main以上即可
我插入了,出现读档的选项了,不过一直是黑的,无法选,但我是有存档的,问一下这是什么原因?(ps:顺便再跟问个,那条语句是控制读档选项位置的?)
作者: j433463 时间: 2012-12-15 01:00
本帖最后由 j433463 于 2012-12-24 02:09 编辑
看看是否起始同伴队伍中没有角色?
脚本中的 main_commands_enabled 是用判断 Game_Party 中队伍人数是否为空值来决定为是,
如果你有存档,但是测试的时候画面中玩家角色一个都没有,得到的结果就是否了,选项就暗的不能选。
这种方式对读档判断并不能真的作是否有存档的判断,如果是想要改正的话,应该改成
add_command("读档", :Load, load_enabled)
add_command("读档", :Load, load_enabled)
并且加上一段:
def load_enabled
for i in 0..3
@file_name = sprintf("Save%02d.rvdata2", i+1)
if FileTest.exist?(@file_name)
return true
end
end
return false
end
def load_enabled
for i in 0..3
@file_name = sprintf("Save%02d.rvdata2", i+1)
if FileTest.exist?(@file_name)
return true
end
end
return false
end
这一段就是判断是否有生成了某个存档,如果有,读档选项就会变亮可选了。
至于调整选项位置,那个只有直接去改 Window_MenuCommand 了,
选项没有使用 x,y 座标,而是按照顺序生成,插入 Main 脚本中没有办法调。
以修改默认脚本加上读档选项的方法我也说一下好了。
首先,在 Window_MenuCommand 默认脚本中,找到:
#--------------------------------------------------------------------------
# ● 生成指令清单
#--------------------------------------------------------------------------
def make_command_list
add_main_commands
add_formation_command
add_original_commands
add_save_command
add_game_end_command
end
#--------------------------------------------------------------------------
# ● 生成指令清单
#--------------------------------------------------------------------------
def make_command_list
add_main_commands
add_formation_command
add_original_commands
add_save_command
add_game_end_command
end
这是菜单选项的生成指令,分别是基本主项目,物品,技能,装备,状态四项,属于 add_main_commands
后面的几个依序是 整队(排队伍),外加选项,存档,结束游戏。
外加选项就是给另外新增选项用的,但它增加的选项会在存档前面,因为本来顺序就在前面,
如果是要在存档前加上读档选项,不必管下面这一行,如果读档选项要放在存档后,就在 add_save_command 加下面这一行:
这样出来的读档选项就在存档后面,依此类推,要放在整队前面,就把一行加在 add_main_commands 下面。
然后,因为我是放在存档选项后面,所以,再找:
#--------------------------------------------------------------------------
# ● 加入存档指令
#--------------------------------------------------------------------------
def add_save_command
add_command(Vocab::save, :save, save_enabled)
end
#--------------------------------------------------------------------------
# ● 加入存档指令
#--------------------------------------------------------------------------
def add_save_command
add_command(Vocab::save, :save, save_enabled)
end
在它的底下再加一段:
#--------------------------------------------------------------------------
# ● 加入读档指令
#--------------------------------------------------------------------------
def add_load_commands
add_command("读档", :load, load_enabled)
end
#--------------------------------------------------------------------------
# ● 加入读档指令
#--------------------------------------------------------------------------
def add_load_commands
add_command("读档", :load, load_enabled)
end
这一段是跟前面生成读档指定加上的那一行 add_load_commands 相对应的,看到 def 后面名称完全一样,
也就是定义 add_load_commands 指令的实际内容,判断档案是否存在,决定显示的读档选项可不可选。
还没完,再找:
#--------------------------------------------------------------------------
# ● 取得存档的有效状态
#--------------------------------------------------------------------------
def save_enabled
!$game_system.save_disabled
end
#--------------------------------------------------------------------------
# ● 取得存档的有效状态
#--------------------------------------------------------------------------
def save_enabled
!$game_system.save_disabled
end
下面加上一段:
#--------------------------------------------------------------------------
# ● 取得读档的有效状态
#--------------------------------------------------------------------------
def load_enabled
for i in 0..3
@file_name = sprintf("Save%02d.rvdata2", i+1)
return true if FileTest.exist?(@file_name)
end
return false
end
#--------------------------------------------------------------------------
# ● 取得读档的有效状态
#--------------------------------------------------------------------------
def load_enabled
for i in 0..3
@file_name = sprintf("Save%02d.rvdata2", i+1)
return true if FileTest.exist?(@file_name)
end
return false
end
这一段,就是上一段中 load_enabled 的定义内容,用来判断有没有存档的自定义函数。
要注意的是如果用了扩展存档数的脚本,可以存档数目大于四个,要改 0..3 中的 3,
譬如可以存五十个存档,3 就要改成 49,因为是从 0 起算,所以是 49.
好,到这儿,菜单上选项已经做好了,但是,运行后点选不会起作用,因为没有定义点选后的动作,
那个是 Scene_Menu 默认脚本在做的事,所以要开始改 Scene_Menu 了。
先找:
#--------------------------------------------------------------------------
# ● 生成指令视窗
#--------------------------------------------------------------------------
def create_command_window
@command_window = Window_MenuCommand.new
@command_window.set_handler(:item, method(:command_item))
@command_window.set_handler(:skill, method(:command_personal))
@command_window.set_handler(:equip, method(:command_personal))
@command_window.set_handler(:status, method(:command_personal))
@command_window.set_handler(:formation, method(:command_formation))
@command_window.set_handler(:save, method(:command_save))
@command_window.set_handler(:game_end, method(:command_game_end))
@command_window.set_handler(:cancel, method(:return_scene))
end
#--------------------------------------------------------------------------
# ● 生成指令视窗
#--------------------------------------------------------------------------
def create_command_window
@command_window = Window_MenuCommand.new
@command_window.set_handler(:item, method(:command_item))
@command_window.set_handler(:skill, method(:command_personal))
@command_window.set_handler(:equip, method(:command_personal))
@command_window.set_handler(:status, method(:command_personal))
@command_window.set_handler(:formation, method(:command_formation))
@command_window.set_handler(:save, method(:command_save))
@command_window.set_handler(:game_end, method(:command_game_end))
@command_window.set_handler(:cancel, method(:return_scene))
end
这儿,看到其中有个 :save 吧?那一行就是存档的,其实从上到下,顺序就是
物品,技能,装备,状态,整队,存档,游戏结束,最后的 cencel 是按 Esc 跳出菜单回到地图画面的。
在 :save 那一行下面,加上一行:
@command_window.set_handler(:load, method(:command_load))
@command_window.set_handler(:load, method(:command_load))
也就是读档的项目,这一行后面,指定了读档要用到的函数模块名称 :command_load
所以,还得去给加个这个模块内容,所以,再找:
#--------------------------------------------------------------------------
# ● 指令“存档”
#--------------------------------------------------------------------------
def command_save
SceneManager.call(Scene_Save)
end
#--------------------------------------------------------------------------
# ● 指令“存档”
#--------------------------------------------------------------------------
def command_save
SceneManager.call(Scene_Save)
end
在这下面加一段:
#--------------------------------------------------------------------------
# ● 指令“读档”
#--------------------------------------------------------------------------
def command_load
SceneManager.call(Scene_Load)
end
#--------------------------------------------------------------------------
# ● 指令“读档”
#--------------------------------------------------------------------------
def command_load
SceneManager.call(Scene_Load)
end
这一段模块的用途就是呼叫读档菜单出来。
好啦,到这儿,读档菜单出来了,修改就到此完成了。
其实, def 自定义的函数模块不一定要在存档后面,位置可以自选的,这儿是为以后修改阅读方便,
所以都按照指定的顺序,放在存档后面,以后要找也方便点。
修改默认脚本是对新手不建议的方式,除非必要最好别去改默认脚本,不是因为改了出错会怎样救不回来,
如果脚本只改这一次,出错了可以删掉它,新建一个工程,复制新工程中的同一脚本过来就没事,
但如果脚本改了不只一次,有其它的用途,你后面错了一次,没办法修正补救了,怎么办?
那时候新建工程复制的方式不能用,除非你有在改错前预留一份备份,要不然整个工程就因此完蛋了。
所以,我建议,要改默认脚本,最好先备份脚本,这样防止改错后无法补救,
也可以复制整个工程当备份,这样改错了还有备份的可以补救。
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |