クラス(基本)
クラスを作る
オブジェクト指向のページにもありますが、Rubyのクラスは
C++と定義の仕方は同じです
class クラス名
end
ただし、クラス名の頭文字は必ず英大文字でなくてはいけません
オブジェクトを生成する
クラスを定義しただけでは意味が無いのもC++と同じです
ちゃんとオブジェクトを生成しましょう
変数 = クラス名.new
newはクラスを使ってオブジェクトを生成するメソッドです
クラスにメソッドを入れる
クラス内にメソッドを定義します
メソッドの定義は前章でやったので割愛します
クラス内のメソッドを呼ぶ場合
オブジェクト(変数)名.メソッド名
と、ドット演算子を挟んで、どのオブジェクト(クラス)から呼ぶのかをきちんと示します
ちなみに、クラス内で定義されたメソッドを「インスタンス・メソッド」と呼びます
インスタンス変数(メンバ変数)
簡単に言えば、「クラス内だけで使える変数」です
この辺もオブジェクト指向ページで説明しているので、そっちを見てください
Rubyでは
@変数名
@(アットマーク)を付けるとインスタンス変数になります
スコープの範囲など、その辺の関係は下の表を見てください
| 変数の種類 |
先頭に付ける記号 |
スコープ範囲 |
| ローカル変数 |
なし |
メソッド内のみ |
| インスタンス変数 |
@ |
クラス内(インスタンス・メソッドを含む) |
| グローバル変数 |
$ |
ソース全体(クラス・メソッド共に) |
initializeメソッド
コンストラクタみたいなものです(分からない人はオブジェクト指向ページを参照)
つまり、インスタンス変数などの初期化を行うメソッドです
このメソッド内の処理は、newでオブジェクトが生成された瞬間に呼ばれます
継承
これもC++と考え方は同じです
違うのは::(スコープ解決演算子)ではなく
class 派生クラス名 < 基本クラス名
と、小なり記号を使う点です
後は、必要なメソッドを書き足すだけです
クラス(応用)
シーン・クラス
Rubyでは、クラスは「1つのメイン関数」です
普通ゲームには「タイトル画面」「メニュー画面」「ゲーム画面」など複数の画面があります
その画面1つ1つを、1つのクラスで作ればプログラム全体の見通しが良くなり、
作る方が楽になります(Cなどで、関数を使ってソースを細分化するのと同じ要領)
幸いMyGameライブラリには、シーン作成を楽にする「Scene::Base」クラスが用意されています
シーン・クラスを使う
Scene::Baseを使ったシーン・クラスは次のように書きます
require 'mygame/boot'
class クラス名 < Scene::Base
def init
#初期化処理
end
def quit
#終了処理
end
def update
#更新処理
end
def render
#描画処理
end
end
Scene.main_loop シーン・クラス名
以上がシーン・クラスの雛型になります
これに各種メソッドを定義していくことで、ゲームを作っていきます
シーンの切り替え
上のままでは、最初に指定したクラス内をループし続けてしまいます
例えるなら、タイトル画面が出続けている状態です
なので、そこからメニュー画面に「切り替える」処理が必要です
そこで、次のようにします
self.next_scene = シーン・クラス
「self.next_scene」に切り替え先のシーン・クラスを代入すると、シーンが切り替わります
これを使って、クラス内に切り替えメソッドを定義し、initメソッドでadd_eventなどを使えば、簡単に画面を切り替えられます
最終更新:2009年05月22日 11:44