RGSS2知ったかぶり
背景を表示する
最終更新:
rgss2study
-
view
入門編・6
シューティングゲームもどきを作る
シューティングゲームもどきを作る
背景を表示する
今回は内容的には、画像の表示を行います。
画像の表示はスクリプト入門の基礎編でもやりましたが、Cacheという、通常使われる技術を使っていなかったので、それを使って記述します。また、背景については作るのが大変なので、デフォルトで入っている素材から
Graphics/Parallaxesに入っているMountainsを転用します。
画像の表示はスクリプト入門の基礎編でもやりましたが、Cacheという、通常使われる技術を使っていなかったので、それを使って記述します。また、背景については作るのが大変なので、デフォルトで入っている素材から
Graphics/Parallaxesに入っているMountainsを転用します。
画像の表示
画像の表示は、以下の記述で行います。
@background = Sprite.new @background.bitmap = Cache.parallax("Mountains")
今回は、変数名にbackgroundを使いましたが、これは何でも構いません。
1行目では、@backgroundという変数に割り当てて、新規のスプライトを作成しています。
スプライトは、画像を表示するための基本原理で、ゲーム画面中に存在する板のようなものです。
2行目で、そのスプライトに画像を割り当てています。
スプライトは、作成しただけでは透明な板です。そのスプライトのbitmapに画像を割り当てることで、絵を映した板になります。
1行目では、@backgroundという変数に割り当てて、新規のスプライトを作成しています。
スプライトは、画像を表示するための基本原理で、ゲーム画面中に存在する板のようなものです。
2行目で、そのスプライトに画像を割り当てています。
スプライトは、作成しただけでは透明な板です。そのスプライトのbitmapに画像を割り当てることで、絵を映した板になります。
実行のタイミング
では、この2行をどこに入れるべきでしょうか。
背景画像は、シーンのメインループが始まる前から存在しているべきですから、開始処理、startのところに記述しましょう。
startメソッドの部分を、このように書き換えます。
背景画像は、シーンのメインループが始まる前から存在しているべきですから、開始処理、startのところに記述しましょう。
startメソッドの部分を、このように書き換えます。
def start @background = Sprite.new @background.bitmap = Cache.parallax("Mountains") end
実行してみると、背景画像がフェードインで表示されると思います。
メソッドごとに分ける
さて、このままでもいいのですが、この調子でstartに記述を続けていくと、startの中身がどんどん見にくくなってしまいます。
そこで、デフォルトのスクリプトの記述にならい、別名のメソッドを作り、そのメソッドの中に処理ごとに記述を小分けにします。
背景を表示するメソッドなので、create_backgroundとでもしておきましょう。
そこで、デフォルトのスクリプトの記述にならい、別名のメソッドを作り、そのメソッドの中に処理ごとに記述を小分けにします。
背景を表示するメソッドなので、create_backgroundとでもしておきましょう。
def start create_background #背景を作成 end
startメソッドをこう書き換え、スクリプトの一番下、最後のendの上の行に、
def create_background @background = Sprite.new @background.bitmap = Cache.parallax("Mountains") end
と追加しましょう。startで、create_backgroundが呼び出され、別途下に定義したcreate_backgroundが実行されることになります。実行すると同じ結果になります。
画像を解放する
さて、スプライトを作成して画像を読み込み、表示したわけですが、このスプライト、画像は、コンピュータ内では記憶領域を確保してそこにデータを置いてあります。
そして、そのままではシーンが終了しても残ってしまいます。記憶領域がもう使わないもので占領されるため、メモリが余計に消費されてしまいます。
作成したスプライト、読み込んだ画像は、シーンが終わる時に解放するのがルールになっています。
シーンが終わる時に実行されるメソッドterminateを、以下のように書き換えましょう。
そして、そのままではシーンが終了しても残ってしまいます。記憶領域がもう使わないもので占領されるため、メモリが余計に消費されてしまいます。
作成したスプライト、読み込んだ画像は、シーンが終わる時に解放するのがルールになっています。
シーンが終わる時に実行されるメソッドterminateを、以下のように書き換えましょう。
def terminate dispose_background #背景を解放 end
そして、dispose_backgroundメソッドをcreate_backgroundと同じように定義します。
def dispose_background @background.bitmap.dispose @background.dispose end
これで、シーン終了時に背景画像を解放できるようになりました。
- すごくわかりやすいです!!
わかりやすい講座を探していたのでありがたいです。
続き楽しみにしています! -- (名無しさん) 2009-04-11 17:41:26 - コメントありがとうございます。
こんなに早く反応があるとは……。
ヘルプの解説を含め、シーンの構造などを説明しているものが
ほとんどなかったのが不満で、作ってみました。
本当に実はあんまり分かっていないので、至らないところも
多いかと思いますが、よろしくお願いします。 -- (管理人) 2009-04-11 18:58:22 - すいません、『自機を表示する』の記述に誤りがありました。
updateの中身を書かないと、自機の位置が正しく反映されません。
記事を修正しておきます。 -- (管理人) 2009-04-14 21:59:20 - ツクール古参ですがRGSSに四苦八苦でした(^^;)
が、シーンの基本構造を解説した記事にガチで救われました
応援してるんで、がんばってください!!続き楽しみです。
-- (うきぶくろ) 2009-04-27 12:17:15 - コメントありがとうございます。
一番書きたかったそのあたりは書いたもののなんだか忙しい+
自分でもRGSSの解読に手間取っているためになかなか更新できていません。
どの程度まで書けるか分かりませんがよろしくお願いします。 -- (管理人) 2009-04-28 08:40:35 - 敵キャラを作成する・2の最後の方に、
updateの際に敵キャラを扱うスプライトの更新を行うのを忘れていたのを修正しました。
イタリック体で修正が入っている部分です。 -- (管理人) 2009-05-02 22:10:23 - UFOが見にくかったので画像に縁取りをつけました。 -- (管理人) 2009-05-04 08:56:56
- ホントにスゴイと思います。尊敬します。
大変だと思いますが少しずつでいいんで頑張ってください。 -- (ユウ) 2009-05-12 00:07:40 - コメントありがとうございます。
恐らくこれを見て作る側はすぐなんでたいそうもどかしいと思いますが……。
ところで、今のところはちゃんとこの講座の通りで動くようになっているのでしょうか?
一応チェックはしてますが、多少ポカはすると思ってたので指摘が無いのがむしろ意外です。 -- (管理人) 2009-05-13 21:11:52 - 大丈夫です。ちゃんと動いています。
頑張ってください。続きが楽しみです。 -- (ユウ) 2009-05-18 01:06:59 - 1段目と言われている部分は『RGSS2』
2段目と言われている部分は『プリセットのスクリプト』
と言われると、より解り易い表現なのでは? -- (通行人) 2009-11-05 12:48:40 - @enemies[i] = Game_Enemy.new(200 + rand(312), rand(384))
↑argumentErrorが発生しました。wrong number of arguments(2 for 0)
どうすればいいでしょうか、頼みます。
-- (help me!!) 2010-01-05 00:22:50 - マウス入力はできますぜ。
Win32とかなんやらをつかって。
キーボードもできるみたいですが見つかりません。
探してます。 -- (シャミラ) 2010-03-24 05:28:28 - 勉強させてもらってます、とても参考になります。
入門編・10 にあるGame_Ememiesのクラスの
attr_accessor ;s_enemies ですが、;を:に変えないとエラーを吐きますので
コピペでやった人は修正した方がよさそうです
-- (邯鄲) 2010-09-04 17:27:18 - @enemies[i] = Game_Enemy.new(200 + rand(312), rand(384))
↑argumentErrorが発生しました。wrong number of arguments(2 for 0)
Game_Enemyクラスって最初からありますよね。
それが原因では? -- (ぽん) 2010-10-03 23:11:42 - 製作初心者なのでとても助かります!! -- (ありがとうございます!) 2011-02-05 12:44:03
- セーブ/ロードまわりはMarshalを使ってスクリプトで記述されていますし、
ファイルの読み書きもRubyと同様にできますから、
セーブやロードをいじるのはスクリプト操作でできることでは? -- (ななし) 2011-05-20 13:04:19 - ダンジョンなら3D化できると、下記サイトに書いてありました。 -- (だれかさん) 2011-08-18 07:26:19
- アルバイトはじめましたd(´∀`*)グッ♪ http://64n.co/ -- (私だ) 2012-01-09 04:49:41
- 風俗店を探よりココ!!男性は報酬あり!d(´∀`*)→ http://www.44m4.net/ -- (江梨子) 2012-08-20 17:11:02
添付ファイル