第16回 メニュー画面の項目について

 2008-09-18
項目の増やし方は、説明していたので大丈夫だと思っていたのですが、
少し不十分なようなので今回、改めて説明したいと思います。

今回は、スクリプトを変更していくのではなく、
どういう処理を行っているメソッドなのかを説明します。

1.メニュー画面レイアウト
2.メニュー項目
3.ステータス画面



メニュー項目に関係のあるメソッドは、
・コマンドウィンドウの作成
・コマンド選択の更新
・アクター選択の更新
・それぞれのシーンの戻る処理
の4つです。

1.コマンドウィンドウの作成
def create_command_window
  # 項目名の指定
  s1 = Vocab::item
  s2 = Vocab::skill
  s3 = Vocab::equip
  s4 = Vocab::status
  s5 = Vocab::save
  s6 = Vocab::game_end
  # コマンドウィンドウを生成
  @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  @command_window.index = @menu_index       # カーソル位置
  if $game_party.members.size == 0          # パーティ人数が 0 人の場合
    @command_window.draw_item(0, false)     # アイテムを無効化
    @command_window.draw_item(1, false)     # スキルを無効化
    @command_window.draw_item(2, false)     # 装備を無効化
    @command_window.draw_item(3, false)     # ステータスを無効化
  end
  if $game_system.save_disabled             # セーブ禁止の場合
    @command_window.draw_item(4, false)     # セーブを無効化
  end
end
では、小分けして見ていきたいと思います。
項目名の部分は、いいですね。
項目名を変数に代入しているわけですが、
この名前は全て文字列を代入しましょう。
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
ここで、コマンドウィンドウを生成しています。
メニュー項目ですね。横幅と項目名を引数とします。
項目名は、表示する順番に配列化してあげます。
表示する順番を変えたい場合は、ここの順番を変えてあげると良いです。
もちろん、項目数を増やしたい場合もここの配列を増減させるだけです。
@command_window.index = @menu_index
この処理は、項目の選択場所を指定しています。
何のための処理かというと、項目を決定してメニューに戻ってきたときに
その決定した項目にカーソルが行くようにしているわけですね。
if $game_party.members.size == 0          # パーティ人数が 0 人の場合
  @command_window.draw_item(0, false)     # アイテムを無効化
  @command_window.draw_item(1, false)     # スキルを無効化
  @command_window.draw_item(2, false)     # 装備を無効化
  @command_window.draw_item(3, false)     # ステータスを無効化
end
if $game_system.save_disabled             # セーブ禁止の場合
  @command_window.draw_item(4, false)     # セーブを無効化
end
これは、禁止にされている項目名を半透明にする処理です。
第1引数は、項目番号を指します。
先ほど項目名の配列を作成したと思います。この順番が項目番号です。
項目番号は、0から始まります。s1 が0、s4 が3となります。

2.コマンド選択の更新
def update_command_selection
  if Input.trigger?(Input::B)
    Sound.play_cancel
    $scene = Scene_Map.new
  elsif Input.trigger?(Input::C)
    # パーティが0人で尚且つ、カーソル位置が4番目以下
    if $game_party.members.size == 0 and @command_window.index < 4
      Sound.play_buzzer
      return
    # セーブが禁止されていて尚且つ、カーソル位置が5番目
    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
ここは、項目を選択して決定やキャンセルを行ったときの処理です。
# パーティが0人で尚且つ、カーソル位置が4番目以下
if $game_party.members.size == 0 and @command_window.index < 4
  Sound.play_buzzer
  return
# セーブが禁止されていて尚且つ、カーソル位置が5番目
elsif $game_system.save_disabled and @command_window.index == 4
  Sound.play_buzzer
  return
end
この部分で、項目の禁止処理を行っています。
禁止の真偽と禁止項目にカーソルがあるのかで分岐します。
禁止だった場合は、必ず return でメソッドを終了させる必要があります。

項目を並び替えた場合は、@command_window.index の値を変更する必要があります。
禁止処理を追加したい場合もここに追加してください。
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
そして、ここで項目の処理を行います。
項目の順番を変更した場合は、when の値を変更してください。
この値も項目番号です。

3.アクター選択の更新
def update_actor_selection
  if Input.trigger?(Input::B)
    Sound.play_cancel
    end_actor_selection
  elsif Input.trigger?(Input::C)
    $game_party.last_actor_index = @status_window.index
    Sound.play_decision
    case @command_window.index
    when 1  # スキル
      $scene = Scene_Skill.new(@status_window.index)
    when 2  # 装備
      $scene = Scene_Equip.new(@status_window.index)
    when 3  # ステータス
      $scene = Scene_Status.new(@status_window.index)
    end
  end
end
ここの処理は、アクターの選択を行うところです。
アクターの選択を行う場合は、先ほどの項目処理で start_actor_selection と記述します。
$game_party.last_actor_index = @status_window.index
選択されたアクターを記録します。
キャンセルで戻ってきたときに、そのアクターにカーソルを合わせるためです。
case @command_window.index
when 1  # スキル
  $scene = Scene_Skill.new(@status_window.index)
when 2  # 装備
  $scene = Scene_Equip.new(@status_window.index)
when 3  # ステータス
  $scene = Scene_Status.new(@status_window.index)
end
ここで、アクター別の項目処理です。
when の値は、項目番号です。最初に配列化したやつですね。
この部分は、最初の項目処理と同じように記述すれば良いです。
@status_window.index は、選択したアクターの番号です。

4.元の画面へ戻る
def return_scene
  $scene = Scene_Menu.new(0)
end
各シーン(メニュー項目の処理)には、return_scene というメニューに
戻るためのメソッドが用意されています。
項目の位置を変更した場合は、このメソッドを書き換えてあげる必要があります。
$scene = Scene_Menu.new(項目番号)
この部分の引数を選択した項目番号に変更しましょう。
簡単に言うとメニューに戻ったときのカーソル位置ですね。


以上がメニュー項目に関する処理だと思います。
抜けている部分などがありましたら、言ってください。
コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/106-fde110b9
≪ トップページへこのページの先頭へ  ≫
カレンダー
01 << 2017/03 >> 02
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

カテゴリー
最近の記事
02/28 お返事
02/14 お返事
01/21 お返事
01/12 更新情報
11/28 お返事

最近のコメント
03/16 お返事
01/21 お返事
11/30 z座標
11/20 z座標
08/03 お返事

タグクラウド

リンク