複数分岐(選択肢)を使いたい!という
XPツクラーのためのスクリプトです。
最初はちょっとだけ手間がかかりますが、
メインスクリプトを書いた後からは
分岐項目を作ってからメソッドを呼び出すだけなので
毎回ごちゃごちゃっとイベントコマンドを書く手間もなく
スッキリと管理が容易になります。…多分。
【今回の変更点】
・Interpreter 7(インタプリタ内ならどこでもok)
・Scene_Map
・Scene_Map
■Interpreter 7
わかりやすいようにスクリプトエディタの
Interpreter 7 の最後あたり(一番下のendを除く)に
以下のスクリプトを書き込みます。
def multi_select(array, cancel = false, cancel_index = 0)
window = Window_Command.new(横幅, array)
window.x = 横位置
window.y = 縦位置
window.height = 縦幅
loop do
Input.update
$game_map.update
# 戦闘中でない場合(マップ画面で)
unless $game_temp.in_battle
$scene.spriteset_update
end
Graphics.update
window.update
# 決定ボタンを押した
if Input.trigger?(Input::C)
# 決定 SE 演奏
$game_system.se_play($data_system.decision_se)
@answer = window.index
break
# cancel が true の時キャンセルボタンを押した
elsif cancel and Input.trigger?(Input::B)
# キャンセル SE 演奏
$game_system.se_play($data_system.cancel_se)
@answer = cancel_index
break
end
end
window.dispose
return true
end
Interpreter 7 の最後あたり(一番下のendを除く)に
以下のスクリプトを書き込みます。
def multi_select(array, cancel = false, cancel_index = 0)
window = Window_Command.new(横幅, array)
window.x = 横位置
window.y = 縦位置
window.height = 縦幅
loop do
Input.update
$game_map.update
# 戦闘中でない場合(マップ画面で)
unless $game_temp.in_battle
$scene.spriteset_update
end
Graphics.update
window.update
# 決定ボタンを押した
if Input.trigger?(Input::C)
# 決定 SE 演奏
$game_system.se_play($data_system.decision_se)
@answer = window.index
break
# cancel が true の時キャンセルボタンを押した
elsif cancel and Input.trigger?(Input::B)
# キャンセル SE 演奏
$game_system.se_play($data_system.cancel_se)
@answer = cancel_index
break
end
end
window.dispose
return true
end
■Scene_Map
キャラクターアニメーションが止まらないようにするため
スプライトセットをInterpreter内でもアップデートできるようにします。
わかりやすい場所に以下のスクリプトを書き込みます。
def spriteset_update
@spriteset.update
$game_player.update
end
以下は複数分岐のイベントの例です。
複数分岐がほしいところに配列で分岐用の項目を作り呼び出します。
◆スクリプト:s1 = "分岐1"
: :s2 = "分岐2"
: :s3 = "分岐3"
:
: :@array = [s1,s2,s3,s4,s5]
ひとつのスクリプトコマンドで11までしか入れられないので
足りない分は以下のようにpushで追加できます。
◆スクリプト:s12 = "分岐12"
: :s13 = "分岐13"
:
: :@array.push s12,s13,s14,s15
あとは複数分岐スクリプトを呼び出すだけです。
@arrayは分岐項目、trueはキャンセルするかどうか、
-1はキャンセル時の分岐indexです。
◆スクリプト: multi_select(@array, true, -1)
その後は分岐別のイベントを作ります。
◆条件分岐: スクリプト: @answer == -1
◆注釈:ここにキャンセル用のイベント
◆
: 分岐終了
配列は0から数えるので、ひとつ目の分岐は0になります。
◆条件分岐: スクリプト: @answer == 0
◆注釈:ここにひとつめの項目のイベント
◆
:分岐終了
「ひとつ目なら1のほうが分かりやすい」と思うなら、
インタプリタに書いたスクリプトの
@answer = window.index 部分を
@answer = window.index + 1 に変更してご使用下さい。
※マップ、バトル以外で使う事はないと思いますが、それ以外で使うとエラーが起きます。
スプライトセットをInterpreter内でもアップデートできるようにします。
わかりやすい場所に以下のスクリプトを書き込みます。
def spriteset_update
@spriteset.update
$game_player.update
end
以下は複数分岐のイベントの例です。
複数分岐がほしいところに配列で分岐用の項目を作り呼び出します。
◆スクリプト:s1 = "分岐1"
: :s2 = "分岐2"
: :s3 = "分岐3"
:
: :@array = [s1,s2,s3,s4,s5]
ひとつのスクリプトコマンドで11までしか入れられないので
足りない分は以下のようにpushで追加できます。
◆スクリプト:s12 = "分岐12"
: :s13 = "分岐13"
:
: :@array.push s12,s13,s14,s15
あとは複数分岐スクリプトを呼び出すだけです。
@arrayは分岐項目、trueはキャンセルするかどうか、
-1はキャンセル時の分岐indexです。
◆スクリプト: multi_select(@array, true, -1)
その後は分岐別のイベントを作ります。
◆条件分岐: スクリプト: @answer == -1
◆注釈:ここにキャンセル用のイベント
◆
: 分岐終了
配列は0から数えるので、ひとつ目の分岐は0になります。
◆条件分岐: スクリプト: @answer == 0
◆注釈:ここにひとつめの項目のイベント
◆
:分岐終了
「ひとつ目なら1のほうが分かりやすい」と思うなら、
インタプリタに書いたスクリプトの
@answer = window.index 部分を
@answer = window.index + 1 に変更してご使用下さい。
※マップ、バトル以外で使う事はないと思いますが、それ以外で使うとエラーが起きます。
ウィンドウの位置などを臨機応変に変えたい!
という場合は、def multi_select(ココ) に追加します。
例えば横位置と縦位置を変えたいなら
def multi_select(省略, x, y)として
window.x = 横位置 を window.x = x
window.y = 縦位置 を window.y = y に変更。
呼び出す際にmulti_select(省略, 横位置数値, 縦位置数値)
というように入ればその数値が反映されるようになります。
他にも
メッセージウィンドウのように文章オプションで位置を変えたい時は
同じように$game_system.message_positionを使って
座標を調整すればOK。Window_Messageを参考にドウゾ。