※練習用ゲームファイルは前回のものを引き続き使います。
装備機能拡張(3)
ついにきました3回目です。
今回で、装備機能の拡張は終わります。
Lesson1 改造場所の確認
さて、今回は何をするかと言うと、現在のステータスと装備変更後のステータスを比較して、「上昇する値は青」「変化しない値は白」「減少する値は赤」と色分けします。
色に関する新しいメソッドを定義するのですが、 Window_EquipLeft でやるより、 Window_Base でやったほうが応用が利くと思います。
なので今回は Window_Base と Window_EquipLeft に決定です。
Lesson2 メソッドの定義方法
メソッドの定義方法はとても簡単です。クラスの定義内(class ○○ 〜 end)にdef ○○ 〜 endと書くだけでOKです。ちなみに、中身は何もなくてもきちんと機能します(エラーにはならない)。
ためしにこんな実験を。
Window_Baseの24行目あたりに次のやつを書き加えます。
23行目の self.z = 100 と25行目の end はもともとあったものなので間違えないでください。
実際にこれを実行しても何の変化も起きません。initializeの一番最後に呼び出したので、何もしないメソッドがエラーになるのであれば、タイトルが表示された時点でエラーがでます。
実験が終わったら、今書き加えた4行は消しておきましょう。残しておいてもエラーにはなりませんが何の得にもならず、邪魔なだけですから。
Lesson3 新しい色の定義
とりあえず、メソッドの定義方法はわかったと思います。
では、今度は意味のあるメソッドを定義します。今回の最終目的は、3つの色を使った色分けですから、その色を定義します。
場所はどこでもいいのですが、まぁ、91行目のフレームの更新の前にしますか。
上の方の色々な色の定義をまねして、次のスクリプトを書き加えます。
今回はしませんでしたが、新しく定義するメソッド名は他と被らないように、1度全文検索をかけたほうが良いです。
被っていた場合、再定義扱いになり、バグが発生する可能性も出てきます。
追加し終わったら、実際に確認しましょう。っと言っても、簡単に確認できるものではないですね。
とりあえず、 Window_EquipLeft の38行目と41行目に下のスクリプトを追加して、攻撃力の「→」や「装備変更後の値」の色が変わっていればOKです。
成功図
一番上の矢印の色が微妙に違うのわかるかな…?
Lesson4 それでは本番
さぁラストです。現在の能力と装備変更後の能力を比較して、色を変えます。
以前 if という条件分岐を使いました。
今回の条件分岐を if を使ったスクリプトで書くとこうなります。
if @new_atk < @actor.atk self.contents.font.color = down_color elsif @new_atk == @actor.atk self.contents.font.color = normal_color else self.contents.font.color = up_color end
これでも問題ないのですが、もっと簡単に済ませる方法があります。
self.contents.font.color = @new_atk < @actor.atk ? down_color : @new_atk == @actor.atk ? normal_color : up_color
やたら横長ですが、これならself.contents.font.colorを三回も書く必要がありません。
補足説明
〜 = 条件 ? trueのときの処理 : falseのときの処理 という条件分岐があります。
今回はそれをさらに応用して
〜 = 条件1 ? 条件1がtrueのときの処理 : 条件2 ? 条件2がtrueのときの処理 : 条件2がfalseのときの処理
というように、条件1がflaseの時に条件2を調べてさらに分岐しているわけです。
Lesson5 追加と確認
今回のスクリプトはやたら長すぎてスクリーンショットが作れないので、先ほどのスクリプトを、7個あるself.contents.draw_text(160, 64, 40, 32, "→", 1)の下に追加してください。
(注意: @new_atk < @actor.atk や @new_atk == @actor.atk の atk は適切な変数に変えてください。)
成功図
装備を変えて色々と確認しましょう。
成功していれば、3回にわたった今回の改造は終了です。
最後に
今回はいそがしくて色々と手抜きしています。すみません。
No.05(作成中)
このコーナーの感想はRPGツクールXP掲示板にでも書いてください。
管理人が喜びます。