これから説明することは、おそらくご存知の部分が多いと思いますが、多くの方に参考になればと思い基本的なところから書いていきます。
基本的にはウィンドウクラスだけ作っても、それらを動かすシーンクラスがないとまったく意味を成しません。
つまりウィンドウクラスを新規に作成するのとシーンクラスを新規に作成するのは切っても切り離せない作業であるということですね。
ある特定のウィンドウの操作により、別のウィンドウを動作させる場合、大体の動作はシーンクラスに記述します。
まぁ例外としてカーソル移動に合わせてウィンドウの中身を変える場合というのもありますけれど(例:アイテム画面における、カテゴリウィンドウのカーソル移動によるアイテムウィンドウのカテゴリ切り替え機能)。
それじゃ、具体的な回答に移りましょうか。以下の回答はエネミー図鑑を製作するという前提のもとに作っております。
仮にです、Array_Aに攻撃力を格納したとすると、これをリストアップする場合はどのようにするべきなのでしょうか?
申し訳ないことに読解力が足りなくてどういうことを意味しているのかうまく把握できている自信がありませんが、おそらくこういうことなのでしょう。
Array_Aにモンスターの各パラメータを入れました。
ウィンドウに攻撃力を表示するにはどうすればいいですか?
そんなことをするくらいならモンスターのデータをそっくりそのまま利用したほうが良いのでは、百歩譲ってそういう利用方法をするならハッシュを利用すればもっとわかりやすくなるのでは、と思います。
パラメータの表示方法はWindow_BaseおよびWindow_Statusをじっくりご覧になればよくわかると思いますが、後々のために抑えておくポイントは「パラメータの表示はrefreshメソッドに書いておくと楽できる」ってところですかね。
コード: 全て選択
class Window_EnemyStatus
(中略)
def refresh
contents.clear
(0..7).each{|i|draw_paramater(i)}
end
def draw_paramater(param_id)
x = 0
y = param_id * line_height
change_color(system_color)
draw_text(x, y, 120, line_height, Vocab::param(param_id))
change_color(normal_color)
draw_text(x + 120, y, 36, line_height, enemy.param(param_id), 2)
end
end
選択式ウィンドウから特定のウィンドウを切り替える際どう記述しますか?
これも二通りの解釈があるので二通りそれぞれ説明しますね。
一つ目は「カテゴリウィンドウで決定キーを押したときにアイテムウィンドウに切り替わる型」です。これは簡単で、シーンクラスでそのウィンドウをアクティブにしてカーソルを表示させるだけです。面倒なのでScene_Itemから該当の動作を抜き出してみました。
コード: 全て選択
class Scene_Item < Scene_ItemBase
#--------------------------------------------------------------------------
# ● カテゴリウィンドウの作成
#--------------------------------------------------------------------------
def create_category_window
@category_window = Window_ItemCategory.new # ウィンドウを作る
(中略)
@category_window.set_handler(:ok, method(:on_category_ok)) # 決定キーを押したときの動作を設定する
(中略)
end
#--------------------------------------------------------------------------
# ● カテゴリ[決定]
#--------------------------------------------------------------------------
def on_category_ok) # 決定キーを押したときの動作
@item_window.activate # 別のウィンドウをアクティブにする
@item_window.select_last # 別のウィンドウのカーソルを表示させる(特殊)
end
(中略)
end
もう一つは「カテゴリウィンドウでカーソルを移動させたときにアイテムウィンドウが切り替わる型」です。こちらはウィンドウクラスに定義するもので、Window_ItemCategoryとWindow_ItemListを見ればわかると思います。
コード: 全て選択
class Window_ItemCategory < Window_HorzCommand
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
@item_window.category = current_symbol if @item_window # 1フレームごとに
end
end
class Window_ItemList < Window_Selectable
#--------------------------------------------------------------------------
# ● カテゴリの設定
#--------------------------------------------------------------------------
def category=(category) # この処理が呼ばれる
return if @category == category
@category = category
refresh # アイテムウィンドウが切り替わる
self.oy = 0
end
end
ちなみにこの関連付けはシーンクラスのほうで行われます。
コード: 全て選択
class Scene_Item < Scene_ItemBase
#--------------------------------------------------------------------------
# ● アイテムウィンドウの作成
#--------------------------------------------------------------------------
def create_item_window
(中略)
@item_window = Window_ItemList.new(0, wy, Graphics.width, wh) # ウィンドウを作る
(中略)
@category_window.item_window = @item_window # これが関連付け
end
(中略)
end
特定のボタンを押すと全ウィンドウを更新、消去場合はどう記述しますか?
特定のボタンを押すと特定のウィンドウだけを更新、消去する場合はどう記述しますか?
多分この場合の更新は「表示内容の更新」で、消去は「見えなくする」ってことですよね。表示内容の更新は「window.refresh」、消去は「window.visible = false」でできます。逆に消去したウィンドウを表示したい場合は「window.visible = true」です。
……具体的に何がしたいかわからない、ソースもないので本当に抽象的な説明しかできてませんが、こんな感じでどうでしょう。
不明点、間違い指摘などありましたらどうぞ。