気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

メニューを作ってみよう part1

初めまして〜。 rinne_gridと申します!

このブログでは、RGSSの勉強経過を載せていきたいと思ってます。

で、一人で勉強するのも悲しいので、RGSS勉強中の方々に
ここに掲載しているコードを書いてもらえるよう、メモしていく予定ですw

誠に申し訳ありませんが、ミス等がございましたら、ご指摘をよろしくお願いいたします。

今回は、こんな感じのメニューを作りたいと思います!

rgss

※左の番号はプログラムを見やすくするためのものです。

  1.   #==========================================
  2.   # ● メニューウィンドウ
  3.   #==========================================
  4. class Window_Template < Window_Selectable
  5.   def initialize
  6.     super(0, 0, 640, 100)
  7.     # ウィンドウの項目最大数
  8.     @item_max = 8
  9.    
  10.     # 一行の項目数
  11.     @column_max = 5 

  12.     # メニューの現在位置
  13.     @index = 0
  14.  
  15.     # このウィンドウに対して、描画領域を設定する
  16.     self.contents = Bitmap.new(width - 32, height - 32)
  17.    
  18.     # 表示する項目を格納した配列
  19.     items =
  20.     [["アイテム", "スキル", "ステータス", "クッキング", "セーブ"],
  21.     ["装備強化", "コンフィグ", "タイトルへ"]]
  22.  
  23.     self.desc_items(items)
  24.    
  25.   end
  26.    
  27.   #--------------------------------------------------------------------------
  28.   # ● メニューの表示項目 
  29.   #--------------------------------------------------------------------------
  30.   def desc_items(items)
  31.     # 表示する項目のy座標
  32.     y = 0
  33.  
  34.     # 引数で受け取ったitemsの各要素に対して、処理を行う 
  35.     # ●この場合は2回ループする
  36.     items.each do |item|
  37.       x = 0
  38.  
  39.       for i in 0...item.size
  40.         # このウィンドウの描画領域のフォントサイズを設定する 
  41.         # ●要するに項目のフォントサイズ
  42.         self.contents.font.size = 21
  43.  
  44.         # item[i]番目の項目を、指定したx座標, y座標に、
  45.         # 横サイズ128・縦サイズ30で描画する
  46.         self.contents.draw_text(x, y, 128, 30, item[i])
  47.  
  48.         x += 128
  49.       end
  50.       y += 35
  51.     end
  52.   end
  53. end

続いて、このウィンドウを表示するScene(シーン)クラスを作ります!
  1. #==================================================
  2. # ● メニューウィンドウを表示するSceneクラス
  3. #==================================================
  4. class Scene_Template
  5.   def initialize
  6.     # メニューウィンドウを生成 
  7.     # ●このとき、Window_Templateのinitializeがよばれます
  8.     @win = Window_Template.new
  9.   end
  10.  
  11.   def main
  12.     # 画面後ろを暗くする
  13.     Graphics.transition
  14.     loop do
  15.       # 画面を更新する ●よくわからんので、私の場合は
  16.       # 「古くなったものは新しくしなくちゃ」という解釈です
  17.       Graphics.update
  18.  
  19.       # 入力を更新する
  20.       #●キーボードのキーなど何が入力されたのか、最新のものにする
  21.       Input.update
  22.       # 自分のupdateメソッドを呼ぶ
  23.       update
  24.     end
  25.   end
  26.  
  27.   def update
  28.     # Window_Templateにupdateなんてない?
  29.     # Window_Template4行目に着目してください
  30.     # class Window_Template < Window_Selectable ってなってます。
  31.     # Window_Templateクラスは、Window_Selectableクラスを
  32.     #元に作っていくぜ!という宣言(?)
  33.     # であり、通常は継承といわれます
  34.     # したがって、Window_Selectableクラスで
  35.     #定義されているupdateを使っているわけですね
  36.     @win.update
  37.   end
  38.  
  39. end
続いて、先程作成したScene_Templateと、Window_Templateを使って
メニュー画面を改造してみようじゃありませんか。

スクリプトエディタの左のリストから、Scene_Mapというものを探してください!

ありましたか?

Scene_Mapにはなにやらごちゃごちゃ書いてますが、とりあえず気にせず。

どんどん下に行きましょう。

Scene_Mapの215行目を見てください!

     214. #メニュー画面に切り替え
   215. $scene = Scene_Menu.new

こんな感じになってませんか?

これを
     214. #メニュー画面に切り替え
   215. $scene = Scene_Menu.new

こうしてください(半角シャープを$sceneの前につけてください)
     214. #メニュー画面に切り替え
   215. #$scene = Scene_Menu.new

そして、216行目に
$scene = Scene_Template.new と 追加してください

     214. #メニュー画面に切り替え
   215. #$scene = Scene_Menu.new
     216. $scene = Scene_Template.new


これで、何もしない横メニューの出来上がりです!

ちょっとだけ、テイ○ズっぽくないですか?あ、そんなことない? ないか。

今回はここで終了させていただきます!