close
這次一樣是新手適用的圖解說明~
含有以下內容,都是最基本的:
●更改選項文字內容
●調整大小、位置
●增減選項(一般、開關)
●窗框透明化
●加入背景
●增減變數視窗(刪除步數、增加地名或其他變數)
那麼就一個一個看吧!
一、更改選項文字內容
在 MenuStatus 的20行可以看到這一段:
其中 s1、s2、s3 的更改位置如下:(資料庫→系統→用語)
或是直接將 $data_system.words.item改成"物品"也是可以的!(以此類推)
二、更改配置(位置、大小)
在更改位置的部分,其中遊戲時間、步數、金錢、狀態的部分比較簡明:
* MenuStatus
大小的部分就要分別到各個地方去調整了:框起來的第一個數字是長、第二個是寬。
至於選項框的部分就要多寫一些東西,如下圖所示:* MenuStatus
其中@select_window可自由取名。
這樣做的原因是為了不去動到其他與Command有關的視窗。
三、增減選項
【一般】
再來就是增減選項了,增加選項的方式其實和標題差不多,
但這就要看增加的內容是什麼,所以就不多說了。
刪減選項主要是在做不用戰鬥的遊戲時,
可能會需要把特技、裝備、狀態給刪除,那麼就參考以下代碼:
(這裡示範把技能和裝備刪去)
紅字:刪除 藍字:更改
#================================================ # ■ Scene_Menu #----------------------------------------------------------------------------- # 處理選單畫面的類別。 #================================================ class Scene_Menu #-------------------------------------------------------------------------- # ● 初始化目標 # menu_index : 命令游標的初期位置 #-------------------------------------------------------------------------- def initialize(menu_index = 0) @menu_index = menu_index end #-------------------------------------------------------------------------- # ● 主處理 #-------------------------------------------------------------------------- def main # 製作命令視窗 s1 = $data_system.words.item s2 = $data_system.words.skill s3 = $data_system.words.equip s2 = "狀態" s3 = "存檔" s4 = "結束遊戲" @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6]) @command_window.index = @menu_index # 同伴人數為 0 的情況下 if $game_party.actors.size == 0 # 物品、特技、裝備、狀態無效化 @command_window.disable_item(0) @command_window.disable_item(1) @command_window.disable_item(2) @command_window.disable_item(3) end # 禁止存檔的情況下 if $game_system.save_disabled # 存檔無效 @command_window.disable_item(2) end # 製作遊戲時間視窗 @playtime_window = Window_PlayTime.new @playtime_window.x = 0 @playtime_window.y = 224 # 製作步數視窗 @steps_window = Window_Steps.new @steps_window.x = 0 @steps_window.y = 320 # 製作金錢視窗 @gold_window = Window_Gold.new @gold_window.x = 0 @gold_window.y = 416 # 製作狀態視窗 @status_window = Window_MenuStatus.new @status_window.x = 160 @status_window.y = 0 # 執行過渡 Graphics.transition # 主循環 loop do # 更新遊戲畫面 Graphics.update # 更新輸入訊息 Input.update # 更新畫面 update # 如果切換畫面就中斷循環 if $scene != self break end end # 準備過渡 Graphics.freeze # 釋放視窗所佔的記憶體空間 @command_window.dispose @playtime_window.dispose @steps_window.dispose @gold_window.dispose @status_window.dispose end #-------------------------------------------------------------------------- # ● 更新畫面 #-------------------------------------------------------------------------- def update # 更新視窗 @command_window.update @playtime_window.update @steps_window.update @gold_window.update @status_window.update # 命令視窗被啟動的情況下: 取用 update_command if @command_window.active update_command return end # 狀態視窗被啟動的情況下: 取用 update_status if @status_window.active update_status return end end #-------------------------------------------------------------------------- # ● 更新畫面 (命令視窗被啟動的情況下) #-------------------------------------------------------------------------- def update_command # 按下 B 鍵的情況下 if Input.trigger?(Input::B) # 演奏取消 SE $game_system.se_play($data_system.cancel_se) # 切換的地圖畫面 $scene = Scene_Map.new return end # 按下 C 鍵的情況下 if Input.trigger?(Input::C) # 同伴人數為 0、存檔、遊戲結束以外的場合 if $game_party.actors.size == 0 and @command_window.index < 4 # 演奏凍結 SE $game_system.se_play($data_system.buzzer_se) return end # 命令視窗的游標位置分支 case @command_window.index when 0 # 物品 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到物品畫面 $scene = Scene_Item.new when 1 # 特技 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 啟動狀態視窗 @command_window.active = false @status_window.active = true @status_window.index = 0 when 2 # 裝備 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 啟動狀態視窗 @command_window.active = false @status_window.active = true @status_window.index = 0 when 1 # 狀態 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 啟動狀態視窗 @command_window.active = false @status_window.active = true @status_window.index = 0 when 2 # 存檔 # 禁止存檔的情況下 if $game_system.save_disabled # 演奏凍結 SE $game_system.se_play($data_system.buzzer_se) return end # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到存檔畫面 $scene = Scene_Save.new when 3 # 遊戲結束 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到遊戲結束畫面 $scene = Scene_End.new end return end end #-------------------------------------------------------------------------- # ● 更新畫面 (狀態視窗被啟動的情況下) #-------------------------------------------------------------------------- def update_status # 按下 B 鍵的情況下 if Input.trigger?(Input::B) # 演奏取消 SE $game_system.se_play($data_system.cancel_se) # 啟動命令視窗 @command_window.active = true @status_window.active = false @status_window.index = -1 return end # 按下 C 鍵的情況下 if Input.trigger?(Input::C) # 命令視窗的游標位置分支 case @command_window.index when 1 # 特技 # 本角色的行動限制在 2 以上的情況下 if $game_party.actors[@status_window.index].restriction >= 2 # 演奏凍結 SE $game_system.se_play($data_system.buzzer_se) return end # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到特技畫面 $scene = Scene_Skill.new(@status_window.index) when 2 # 裝備 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換的裝備畫面 $scene = Scene_Equip.new(@status_window.index) when 1 # 狀態 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到狀態畫面 $scene = Scene_Status.new(@status_window.index) end return end end end |
但這樣就結束了嗎?當然是還沒!
雖然是成功的把選項刪除了,可是還是會有點小問題,
這時候就要分別前往Scene_Status、Scene_End、Scene_Save 去修改以下腳本:
這些就是指按下取消鍵(或確定鍵)時回到標題畫面光標所在的位置。
所以其他部分就能以此類推囉!
★補充★Scene_End的106行附近也需要改唷!
$scene = Scene_Menu.new(5) → $scene = Scene_Menu.new(3)
【開關】
想要用開關來調整可選擇的選項也是沒問題的!
以下示範用開關1來開啟物品欄:
紅字:修改 藍字:增加
#============================================= # ■ Scene_Menu #------------------------------------------------------------------------------ # 處理選單畫面的類別。 #============================================= class Scene_Menu #-------------------------------------------------------------------------- # ● 初始化目標 # menu_index : 命令游標的初期位置 #-------------------------------------------------------------------------- def initialize(menu_index = 0) @menu_index = menu_index end #-------------------------------------------------------------------------- # ● 主處理 #-------------------------------------------------------------------------- def main # 製作命令視窗 s1 = $data_system.words.item s2 = $data_system.words.skill s3 = $data_system.words.equip s4 = "狀態" s5 = "存檔" s6 = "結束遊戲" if $game_switches[1] == true #當開關1開啟時,顯示所有選項 @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6]) @command_window.index = @menu_index else #其他狀況時(關閉),不顯示物品 @command_window = Window_Command.new(160, [s2, s3, s4, s5, s6]) @command_window.index = @menu_index end @select_window = @command_window @select_window.x = 0 @select_window.y = 0 # 同伴人數為 0 的情況下 if $game_switches[1] == true #當開關1開啟時 if $game_party.actors.size == 0 # 物品、特技、裝備、狀態無效化 @command_window.disable_item(0) @command_window.disable_item(1) @command_window.disable_item(2) @command_window.disable_item(3) else #關閉時 if $game_party.actors.size == 0 # 特技、裝備、狀態無效化 @command_window.disable_item(0) @command_window.disable_item(1) @command_window.disable_item(2) end end end # 禁止存檔的情況下 if $game_system.save_disabled # 存檔無效 if $game_switches[1] == true @command_window.disable_item(4) else @command_window.disable_item(3) end end # 製作遊戲時間視窗 @playtime_window = Window_PlayTime.new @playtime_window.x = 0 @playtime_window.y = 224 @playtime_window.back_opacity = 130 # 製作步數視窗 @steps_window = Window_Steps.new @steps_window.x = 0 @steps_window.y = 320 # 製作金錢視窗 @gold_window = Window_Gold.new @gold_window.x = 0 @gold_window.y = 416 # 製作狀態視窗 @status_window = Window_MenuStatus.new @status_window.x = 160 @status_window.y = 0 # 執行過渡 Graphics.transition # 主循環 loop do # 更新遊戲畫面 Graphics.update # 更新輸入訊息 Input.update # 更新畫面 update # 如果切換畫面就中斷循環 if $scene != self break end end # 準備過渡 Graphics.freeze # 釋放視窗所佔的記憶體空間 @command_window.dispose @playtime_window.dispose @steps_window.dispose @gold_window.dispose @status_window.dispose end #-------------------------------------------------------------------------- # ● 更新畫面 #-------------------------------------------------------------------------- def update # 更新視窗 @command_window.update @playtime_window.update @steps_window.update @gold_window.update @status_window.update # 命令視窗被啟動的情況下: 取用 update_command if @command_window.active update_command return end # 狀態視窗被啟動的情況下: 取用 update_status if @status_window.active update_status return end end #-------------------------------------------------------------------------- # ● 更新畫面 (命令視窗被啟動的情況下) #-------------------------------------------------------------------------- def update_command # 按下 B 鍵的情況下 if Input.trigger?(Input::B) # 演奏取消 SE $game_system.se_play($data_system.cancel_se) # 切換的地圖畫面 $scene = Scene_Map.new return end # 按下 C 鍵的情況下 if Input.trigger?(Input::C) # 同伴人數為 0、存檔、遊戲結束以外的場合 if $game_party.actors.size == 0 and @command_window.index < 4 # 演奏凍結 SE $game_system.se_play($data_system.buzzer_se) return end # 命令視窗的游標位置分支 if $game_switches[1] == true case @command_window.index when 0 # 物品 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到物品畫面 $scene = Scene_Item.new when 1 # 特技 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 啟動狀態視窗 @command_window.active = false @status_window.active = true @status_window.index = 0 when 2 # 裝備 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 啟動狀態視窗 @command_window.active = false @status_window.active = true @status_window.index = 0 when 3 # 狀態 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 啟動狀態視窗 @command_window.active = false @status_window.active = true @status_window.index = 0 when 4 # 存檔 # 禁止存檔的情況下 if $game_system.save_disabled # 演奏凍結 SE $game_system.se_play($data_system.buzzer_se) return end # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到存檔畫面 $scene = Scene_Save.new when 5 # 遊戲結束 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到遊戲結束畫面 $scene = Scene_End.new end return else case @command_window.index when 0 # 特技 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 啟動狀態視窗 @command_window.active = false @status_window.active = true @status_window.index = 0 when 1 # 裝備 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 啟動狀態視窗 @command_window.active = false @status_window.active = true @status_window.index = 0 when 2 # 狀態 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 啟動狀態視窗 @command_window.active = false @status_window.active = true @status_window.index = 0 when 3 # 存檔 # 禁止存檔的情況下 if $game_system.save_disabled # 演奏凍結 SE $game_system.se_play($data_system.buzzer_se) return end # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到存檔畫面 $scene = Scene_Save.new when 4 # 遊戲結束 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到遊戲結束畫面 $scene = Scene_End.new end return end end end #-------------------------------------------------------------------------- # ● 更新畫面 (狀態視窗被啟動的情況下) #-------------------------------------------------------------------------- def update_status # 按下 B 鍵的情況下 if Input.trigger?(Input::B) # 演奏取消 SE $game_system.se_play($data_system.cancel_se) # 啟動命令視窗 @command_window.active = true @status_window.active = false @status_window.index = -1 return end # 按下 C 鍵的情況下 if Input.trigger?(Input::C) # 命令視窗的游標位置分支 if $game_switches[1] == true case @command_window.index when 1 # 特技 # 本角色的行動限制在 2 以上的情況下 if $game_party.actors[@status_window.index].restriction >= 2 # 演奏凍結 SE $game_system.se_play($data_system.buzzer_se) return end # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到特技畫面 $scene = Scene_Skill.new(@status_window.index) when 2 # 裝備 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換的裝備畫面 $scene = Scene_Equip.new(@status_window.index) when 3 # 狀態 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到狀態畫面 $scene = Scene_Status.new(@status_window.index) end return else case @command_window.index when 0 # 特技 # 本角色的行動限制在 2 以上的情況下 if $game_party.actors[@status_window.index].restriction >= 2 # 演奏凍結 SE $game_system.se_play($data_system.buzzer_se) return end # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到特技畫面 $scene = Scene_Skill.new(@status_window.index) when 1 # 裝備 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換的裝備畫面 $scene = Scene_Equip.new(@status_window.index) when 2 # 狀態 # 演奏確定 SE $game_system.se_play($data_system.decision_se) # 切換到狀態畫面 $scene = Scene_Status.new(@status_window.index) end return end end end end |
這個部分改好之後,
再到Scene_Skill、Scene_Equip、Scene_Status、Scene_End更改光標位置:
以上是Scene_Skill的部分,相信改到這裡,都知道要怎麼改了~
所以就說到這裡囉!
四、窗框半透明
這個就和標題選項框是一樣的東西,敬請參考。
@名稱.back_opacity = 透明度
@名稱.opacity = 透明度
@名稱.opacity = 透明度
名稱是指command_window、playtime_window……以此類推。
透明度數值0~255,數字越小越透明。
效果:
五、加入背景
這個也是非常好用的「技能」,幾乎所有部分都能這樣增加背景(或圖片)唷~
在Scene_Menu的#製作狀態視窗下方寫上以下腳本:(BG是圖片名稱)
其中圖片路徑可自行更改,@back也可自行更名、@back.opacity是透明度。
(小提醒:其實只要在def main~end之間就可以加了唷!)
接著在以下部分寫上就完成囉:
@back名稱可自訂,須與上方配合。
六、增減變數視窗(刪除步數、增加其他變數)
一般來說都不會想要「步數」這個東西,
只要照著下面幾個步驟就能把這個不實用的東西換掉唷!
【刪除步數、增加地名】
(為求方便,直接拿「步數」來改成「地名」)
將以上紅框內文字改為:
(紫框部分是給自己看的,改一下會比較清楚。)
最右下的數字1是靠左對齊,因此2就是靠右對齊。
############ # Game_Map # ############ class Game_Map attr_reader:map_id def mpname $mpname = load_data("Data/MapInfos.rxdata") $mpname[@map_id].name end end |
(註:也可以直接貼在Window_Mapname裡(最上方或最下方皆可)。)
回到Scene_Menu,將所有"步數"改成"地名":
這樣就完成囉!
PS.如果是刪除掉整個視窗的話,只要把以上該改的地方刪掉就好囉!
【置入其他變數】
只將 Window_Steps 第27行的 $game_party.steps 改為 $game_variables[1] 即可。
(紅字1是指變數編號,可自行代換)
以上就是主選單的基本更改技巧~
其實也可以多看看其他人的腳本就知道要怎麼改了!
看懂了就能試著改出自己想要的樣子囉!
http://forum.gamer.com.tw/C.php?bsn=04918&snA=17645&tnum=1
全站熱搜