2014-02-08

RGSS-複数分岐

ShareLink
«RGSS一覧

複数分岐(選択肢)を使いたい!という
XPツクラーのためのスクリプトです。

最初はちょっとだけ手間がかかりますが、
メインスクリプトを書いた後からは
分岐項目を作ってからメソッドを呼び出すだけなので
毎回ごちゃごちゃっとイベントコマンドを書く手間もなく
スッキリと管理が容易になります。…多分。



【今回の変更点】
・Interpreter 7(インタプリタ内ならどこでもok)
・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

■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 に変更してご使用下さい。

※マップ、バトル以外で使う事はないと思いますが、それ以外で使うとエラーが起きます。

ウィンドウの位置などを臨機応変に変えたい!
という場合は、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を参考にドウゾ。



★このスクリプトを使った関連作品

category: