「自機を作成する」の編集履歴(バックアップ)一覧に戻る

自機を作成する - (2009/04/11 (土) 20:55:48) のソース

入門編・7
シューティングゲームもどきを作る
*自機を作成する
今回は、ゲームオブジェクトクラスの作成を行います。
自機の表示は次回まで持ち越しです。
先はまだ長いですが、頑張りましょう。

**ゲームオブジェクトを定義する
スクリプトでは、例えば戦闘シーンのパーティと敵キャラなど、要素に分けられるものを
別途、ゲームオブジェクトとして定義していました。
これに倣って、シューティングゲームにおける『自機』『敵キャラ』『弾』も、ゲームオブジェクトとして作成することにします。
(とりあえずは、しばらく自機だけです。)

自機クラス、Game_MyMachine(マイマシン、つまり自機)を、素材・ここに追加の下に追加しましょう。
デフォルトのスクリプトでは、ゲームオブジェクトはシーンより上に位置していますので、
ここではScene_Shootingの上の行に追加しました。
ちなみに、素材・ここに追加の所ではなく、ゲームオブジェクトのところに置いたりしてもエラーにはなりません。
あまり多くのクラスを作成する場合、素材・ここに追加の下に全部置くと多少見にくいかも知れません。

さて、ゲームオブジェクトもクラスの一つなので、クラスと同様に定義します。
>class Game_MyMachine
> (この中に中身)
>end
が最小の構造です。
この中に、&bold(){クラスの持つ変数(プロパティという方が正確)、クラスのメソッド、あと『定数』}を定義することが出来ます。
定数というのは初めて出てきたかと思いますが、これは変数のようなもので、ただし変更しないもののことを言います。
例えば、自機の縦横のサイズは定数として定めておくと、後で便利です。
では、自機に必要な変数を考えてみましょう。まず最初に思い浮かぶのが、位置。x座標とy座標です。
(RPGでは32×32マスを単位として座標を決めていますが、ここではピクセル、点の位置で決めます。)
定数も含めて定義すると、下のようになります。
>#==============================================================================
># ■ Game_MyMachine
>#------------------------------------------------------------------------------
>#  シューティングゲームの自機を扱うクラスです。
>#==============================================================================
>
>class Game_MyMachine
>  #--------------------------------------------------------------------------
>  # ● 公開インスタンス変数
>  #--------------------------------------------------------------------------
>  attr_accessor   :x                        # 自機画像の左上 X 座標
>  attr_accessor   :y                        # 左上 Y 座標
>  #--------------------------------------------------------------------------
>  # ● 定数
>  #--------------------------------------------------------------------------
>  SIZE_X = 32 #自機の幅(ピクセル)
>  SIZE_Y = 32 #自機の高さ(ピクセル)
>  WND_X = 544 #ウィンドウのサイズ
>  WND_Y = 416
>end
一応、画面のサイズも定数として決めました。変数は後から増やしますが、とりあえずこれだけで。
コメントは多めに、あるいはデフォルトのものに従った形でつけておくと見やすいです。
attr_accessorというのは、Rubyの文法で、変数に対するアクセスの権限を定めるものですが、
とりあえずここでは全ての変数をこの形で記述しておくものとします。一番アクセスがしやすい形なので、不便が少ないです。
定数は、&bold(){Rubyでは一文字目を大文字にした変数名をつけると定数になります}。
慣例から、定数はここでは全て大文字で記述します。
逆に言うと、一文字目が大文字の可変の変数は作れないので変数名をつける時に大文字を誤って使わないよう気をつけましょう。

**initializeメソッドの作成
変数と定数の他に、通常、ゲームオブジェクトについて必ず作るのが、initializeメソッドです。
これは、変数の初期値を決定するのが主な内容の、&bold(){newによってオブジェクトを作成した時に呼び出されるメソッド}です。
定数の定義の下、最後の行のendの上に、以下の文を付け加えてください。
> def initialize
>    @x=120
>    @y=200
>  end
自機の初期位置を、(120,200)の位置に定めました(数字は適当です)。
これにより、ゲームオブジェクトを作成した時に、初期値が定められます。
なお、"@"は、インスタンス変数といって、ゲームオブジェクトの持つ変数(ここではx,y)にアクセスする時につけるもので、
これが無いと自機のx座標と関係ない別の変数xに代入して、しかもそのxはinitializeメソッドの終了時に
破棄されるので、何もしていないことになります。クラスの変数を操作する際には大抵つけるので、注意しましょう。

**newによって、ゲームオブジェクトを作成してみる
Scene_Shootingに、自機オブジェクトを作成するスクリプトを加えてみましょう。
内容は前回の背景表示とあまり変わらないので、結果だけ示します。
>  def start
>    create_background  # 背景の作成
>    create_my_machine # 自機の作成のメソッドを追加
>  end
下でcreate_my_machineを定義。
>  def create_my_machine
>    @myMachine = Game_MyMachine.new
>  end
myMachineという変数にGame_MyMachineクラスのオブジェクトを割り当てました。
このmyMachineに@がついているのは、Scene_Shootingクラスに属する変数だからです。
また、終了時にはやはり廃棄する必要があり、
>  def terminate
>    dispose_background  # 背景画像の解放
>    dispose_my_machine  # 自機の解放を追加
>  end
dispose_my_machineを定義
>  def dispose_my_machine
>    @myMachine.dispose
>  end  
となります。
ただし、このまま実行しても、自機は表示されません。
自機を表示するためのスプライトが無いし、だいたいにおいて自機のグラフィックをどこにも指定していません。
次回、スプライトを自機とリンクさせ、画面に表示させる方法をやります。
----
[[前へ>背景を表示する]]・[[次へ>自機を表示する]]
----
#comment_num2(size=40,vsize=4,num=20,logpage=コメント一覧)
目安箱バナー