RGSS基本講座(6)
概要
- メソッド(2)
- クラス(2)
メソッド(2)
今回は実際にメソッドの定義方法を紹介したいと思います。
インスタンスメソッドと関数的メソッドは定義する場所が違うだけで、ルールは一緒ですが、クラスメソッドは若干違います。クラスメソッドは定義することがあまりないので、ここでは紹介しません。
以下はWindow_Baseクラスに定義されている、normal_colorメソッドです。
def normal_color return Color.new(255, 255, 255, 255) end
def メソッド名 処理 end
という構造になっています。defはdefine(定義する)の意味です。
メソッド名の後とendの前は必ず改行を入れます。
returnは戻り値を指定しています。省略した場合は一番最後に得た値が戻り値になります。
メソッド名のルールはローカル変数のとほぼ同じです。
もう1つ例を見てみましょう。
Game_Screenクラスのstart_shakeメソッドです。
def start_shake(power, speed, duration) @shake_power = power @shake_speed = speed @shake_duration = duration end
normal_colorメソッドとの大きな違いは、メソッド名のあとの(power, speed, duration)です。
これは引数(ひきすう)と呼ばれるもので、メソッド外から値を引き継ぐときに使います。引き継ぎ先の変数(今回の場合"power","speed","duration"の3つ)を仮引数と呼びます。
仮引数に直接オブジェクトを代入すると、引数を省略してメソッドを呼び出したときにその値が使われます。引数のデフォルト値とか言います。
クラス(2)
クラスの正体はインスタンスメソッドやインスタンス変数、クラスメソッド、クラス変数、定数、そしてアクセスメソッドのまとまりです。
クラスの定義方法はメソッドの定義とそっくりです。基本的にdefをclassに変えるだけです。もちろん引数はありませんが。
そして、class~end間にインスタンスメソッドを定義したりします。
クラスを継承してサブクラスを定義する場合はクラス名のあとに" < スーパークラス名"をつけます。
とりあえず、例を見てみましょう。下はWindow_Goldクラスです。
class Window_Gold < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0, 160, 64) self.contents = Bitmap.new(width - 32, height - 32) refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear cx = contents.text_size($data_system.words.gold).width self.contents.font.color = normal_color self.contents.draw_text(4, 0, 120-cx-2, 32, $game_party.gold.to_s, 2) self.contents.font.color = system_color self.contents.draw_text(124-cx, 0, cx, 32, $data_system.words.gold, 2) end end
インスタンスメソッドが2つだけで少ないような気がしますが、Window_Baseクラスを継承しているので、実際に使えるメソッドはたくさんあります。
話は少しそれますが、" < スーパークラス名"をつけなくても(つまり、どのクラスも継承しない場合)、実際はObjectクラスのサブクラスという扱いなので、Objectクラスで定義されているメソッドは使うことができます。
initializeメソッドは少し特殊なメソッドで、このメソッドはクラスメソッドnewを実行したときに自動的に実行されるメソッドです。
インスタンス変数を利用する場合は大抵このメソッド内で初期値を設定します。
アクセスメソッドは、プロパティと関係する内容なので、解説は次回にします。
では、また次回。
コメント
コメントの投稿
トラックバック
http://rgss.blog26.fc2.com/tb.php/9-0226188c
この記事にトラックバックする(FC2ブログユーザー)