fc2ブログ

2023-03

RGSS基本講座(6)

概要

  • メソッド(2)
  • クラス(2)

メソッド(2)

今回は実際にメソッドの定義方法を紹介したいと思います。
インスタンスメソッドと関数的メソッドは定義する場所が違うだけで、ルールは一緒ですが、クラスメソッドは若干違います。クラスメソッドは定義することがあまりないので、ここでは紹介しません。

以下はWindow_Baseクラスに定義されている、normal_colorメソッドです。

def normal_color
    return Color.new(255, 255, 255, 255)
end
def メソッド名
    処理
end

という構造になっています。defdefine(定義する)の意味です。
メソッド名の後と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を実行したときに自動的に実行されるメソッドです。
インスタンス変数を利用する場合は大抵このメソッド内で初期値を設定します。

アクセスメソッドは、プロパティと関係する内容なので、解説は次回にします。
では、また次回。

スポンサーサイト



«  RGSS基本講座(5)  | HOME |  RGSS基本講座(7)  »

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

http://rgss.blog26.fc2.com/tb.php/9-0226188c
この記事にトラックバックする(FC2ブログユーザー)

«  RGSS基本講座(5)  | HOME |  RGSS基本講座(7)  »

プロフィール

目次

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

 

カウンター