[RGSS2]キャラステ画面

※ 2011/08/04 更新
|д・) ソォーッ…



 さぁ、ついったーでも呟きましたが、キャラクターのステータス画面が完成したよ!
 まだいじるかもしれないので暫定版ですが↓

キャラステ画面_暫定版001


 ……こんな感じ。

 今日もメモがてら書いていきますよー。
 本気で長いですよー。(でも、最後まで読むと……フフフ)

 これからステ画面作るぞーって人も、ベテランの方も一緒にお勉強しませうYO(・∀・)♪
 というか、独学なので、間違いがあったりしたら是非ご指摘お願いしますっ!!




【はじめに…構成】
 ということで、今日は作っていく過程でできたソースをじゃんじゃん公開しちゃう。

 まずは構成の説明から。
 上の画像の通り、6つのウィンドウにて構成されてます。
 左上から

 1.名前・レベル・称号
 2.立ち絵・ステート表示
 3.経験値情報

 右上に移って
 4.HP・MP・KGCさんのオーバードライブゲージ
 5.基本パラメーター
 6.装備一覧

 という感じです。



【1.DS_CST_Actor_Info】
 全部書いていくと、膨大な量になってしまうので、
 今日は1.を取り上げていきたいと思います。

 1.DS_CST_Actor_Info

DS_CST_Actor_Info.jpg


#==============================================================================
# □ DS_CST_Actor_Info
#------------------------------------------------------------------------------
#  ステータス画面で、名前・レベル・称号を表示するウィンドウです。
#==============================================================================

class CST_Actor_Info < Window_Base
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
# actor : アクター
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 272, 80) # ウィンドウの位置とサイズ
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_actor_name(@actor, 0, 0) # 名前
draw_actor_lv(@actor, 180, 0) # レベル
draw_actor_class(@actor, 0, 24) # 職業
end
#--------------------------------------------------------------------------
# ○ 名前の描画
# actor : アクター
# x : 描画先 X 座標
# y : 描画先 Y 座標
#--------------------------------------------------------------------------
def draw_actor_name(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 48, WLH, DS::CST::Vocab::NameTitle)
self.contents.font.color = hp_color(actor)
self.contents.draw_text(x + 36, y, 120, WLH, actor.name, 2)
end
#--------------------------------------------------------------------------
# ○ レベルの描画
# x : 描画先 X 座標
# y : 描画先 Y 座標
#--------------------------------------------------------------------------
def draw_actor_lv(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, WLH, Vocab::level_a)
self.contents.font.color = normal_color
self.contents.draw_text(x + 32, y, 24, WLH, actor.level, 2)
end
#--------------------------------------------------------------------------
# ○ クラスの描画
# actor : アクター
# x : 描画先 X 座標
# y : 描画先 Y 座標
#--------------------------------------------------------------------------
def draw_actor_class(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 48, WLH, DS::CST::Vocab::ClassTitle)
self.contents.font.color = normal_color
self.contents.draw_text(x + 36, y, 120, WLH, actor.class.name, 2)
end
end # class CST_Actor_Info < Window_Base のend




【オブジェクト初期化とリフレッシュ】
 OH、ブログデザインからはみ出してますけど、気にしない気にしない。

 「オブジェクト初期化」で情報を描画するウィンドウの位置やサイズを決めていること。
 「リフレッシュ」でその情報を示していること。

 これは昨日の記事にも書きました。

 「オブジェクト初期化」内にある

 super(0, 0, 272, 80)

をいじることにより、このウィンドウの位置とサイズが決まります。

 配列は、(x, y, width, height)となっていて、

 ウィンドウの位置=x(横), y(縦)
x_y.jpg

 ウィンドウのサイズ=width(幅), height(高さ)
width_height.jpg

 という意味です。

 この配列は、ウィンドウだけでなく、画像の配置や、文字の配置にも使われるので
 覚えておくと便利ですよ~。

 次に、「リフレッシュ」について。
 呼び出している情報は以下の3つです。
 HP・MP・レベルの描画。
 そして、その詳細設定が以降に続きます。
 "def draw~"で設定されたものが、
 「リフレッシュ」の"draw~"の部分で呼び出されている訳です。



【レベルの描画】
 「レベルの描画」については、位置決めくらいしかいじってません。

 self.contents.draw_text(x, y, 32, WLH, Vocab::level_a)

 self.contents.draw_text(x + 32, y, 24, WLH, actor.level, 2)

 この2つが、レベルの情報内の文字の位置を変化させる行です。

 そして、この2つを合わせた「レベルの描画」全体の位置を決めるのは、
 「リフレッシュ」の部分。

 draw_actor_lv(@actor, 180, 0)




【システム文字の追加】
 「名前とクラスの描画」についてですが、
 こちらは位置決めの他に、システム文字の追加をしています。
 ラルフの手前の「名前」や、勇者の手前の「称号」の部分のことです。

 「名前の描画」からその部分を抜き出すと、

self.contents.font.color = system_color
self.contents.draw_text(x, y, 48, WLH, DS::CST::Vocab::NameTitle)

 の部分になります。

 1行目でフォントの色を、
 2行目で描画する文字の位置とサイズ及び内容を定義しています。

 デフォルトだと、ただ名前と職業がポツッと表示されるだけなので、
 見た目を良くするためだけの追記という(´Д`;)アセアセ
 もちろん、この2行を消せば、デフォルトのように名前だけ、職業だけが表示されます。



【0.DS_CST_Scene_Status】
 さて、ウィンドウの情報の定義が終わりましたが、
 これだけではステータスウィンドウに表示されません。
 上記のスクリプトはあくまで、
 (・∀・)「ウィンドウにこういう情報を表示するよー。見た目はこうだよー」
 って決めただけに過ぎず、まだステータス画面にデビューできている訳ではないのです。

 ここで、次のスクリプトの出番。
 0.DS_CST_Scene_Status

#==============================================================================
# □ DS_CST_Scene_Status
#------------------------------------------------------------------------------
#  ステータス画面の処理を行うクラスです。
#==============================================================================

class Scene_Status < Scene_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor_index : アクターインデックス
#--------------------------------------------------------------------------
def initialize(actor_index = 0)
@actor_index = actor_index
end
#--------------------------------------------------------------------------
# ○ 開始処理
#--------------------------------------------------------------------------
def start
super
create_menu_background
@actor = $game_party.members[@actor_index]
@status_window = CST_Actor_Info.new(@actor) # DS_CST_Actor_Infoの開始
@actor_body = CST_Actor_Body.new(@actor) # DS_CST_Actor_Bodyの開始
@actor_exp = CST_Actor_Exp.new(@actor) # DS_CST_Actor_Expの開始
@actor_basic = CST_Actor_Basic.new(@actor) # DS_CST_Actor_Basicの開始
@actor_parameters = CST_Actor_Parameter.new(@actor) # DS_CST_Actor_Parameterの開始
@actor_equip = CST_Actor_Equip.new(@actor) # DS_CST_Actor_Equipの開始
end
#--------------------------------------------------------------------------
# ○ 終了処理
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@status_window.dispose # DS_CST_Actor_Infoの終了
@actor_body.dispose # DS_CST_Actor_Bodyの終了
@actor_exp.dispose # DS_CST_Actor_Expの終了
@actor_basic.dispose # DS_CST_Actor_Basicの終了
@actor_parameters.dispose # DS_CST_Actor_Parameterの終了
@actor_equip.dispose # DS_CST_Actor_Equipの終了
end
#--------------------------------------------------------------------------
# ● 元の画面へ戻る
#--------------------------------------------------------------------------
def return_scene
$scene = Scene_Menu.new(3)
end
#--------------------------------------------------------------------------
# ● 次のアクターの画面に切り替え
#--------------------------------------------------------------------------
def next_actor
@actor_index += 1
@actor_index %= $game_party.members.size
$scene = Scene_Status.new(@actor_index)
end
#--------------------------------------------------------------------------
# ● 前のアクターの画面に切り替え
#--------------------------------------------------------------------------
def prev_actor
@actor_index += $game_party.members.size - 1
@actor_index %= $game_party.members.size
$scene = Scene_Status.new(@actor_index)
end
#--------------------------------------------------------------------------
# ○ フレーム更新
#--------------------------------------------------------------------------
def update
update_menu_background
@status_window.update # DS_CST_Actor_Infoの更新
@actor_body.update # DS_CST_Actor_Bodyの更新
@actor_exp.update # DS_CST_Actor_Expの更新
@actor_basic.update # DS_CST_Actor_Basicの更新
@actor_parameters.update # DS_CST_Actor_Parameterの更新
@actor_equip.update # DS_CST_Actor_Equipの更新
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::R)
Sound.play_cursor
next_actor
elsif Input.trigger?(Input::L)
Sound.play_cursor
prev_actor
end
super
end
end




【"Scene_Status"の改変】
 このスクリプトは名前の通り、"Scene_Status"に手を加えたものです。
 変えた部分は「○ 開始処理」「○ 終了処理」「○ フレーム更新」の3つ。
 要は、"○"になっている所が変えた部分で、
 "●"のままのところはデフォルトのままってことなんです。

 デフォルトでは1枚のウィンドウを呼び出すだけでしたが、
 今回の場合6枚も呼び出す関係上、そうなりました。
 ウィンドウの数だけ開始処理をし、終了処理をし、フレーム更新せにゃならんようなのです。

 てなわけで、今回のDS_CST_Actor_Infoを表示させる為に追加したのは以下の3つ。

 @status_window = CST_Actor_Info.new(@actor) # DS_CST_Actor_Infoの開始

 @status_window.dispose # DS_CST_Actor_Infoの終了

 @status_window.update # DS_CST_Actor_Infoの更新

 これでようやく、ステータス画面という舞台に上がれたのでした。
 ε-(;-ω-`A) フゥ…



【さいごに…】
 1つのウィンドウを表示させるのに、こんなにいろんな力が働いているとは……
 やはり、触ってみないとわからないことって多いですね。

 こんな長い記事を、ここまでご覧下さりありがとうございました。
 最後に、つまらないものですが、今回完成したRGSS2を置いておきます。

 一応、「素材」と銘は打ってありますが、
 SOLAはRGSS2のド素人ですし、サポートは難しいと思います。
 「自作ステータス画面の参考に見てみたい」とか
 そういうのでお役に立てたら嬉しいです エヘヘ♪(●´ω`●)ゞ
 あと、勉強中の身ですので、ベテランさんからのダメ出しも歓迎ですっ。

DS_Custom_Status.txt
 Ver.1.0.1 2011/08/04 「装備拡張 - KGC_EquipExtension」導入による、装備欄表示の変更



|彡サッ!

この記事へのコメント


この記事へのトラックバック