RGSS,RGSS2で弾を発射させる

| | コメント(0) | トラックバック(0)

今回は、RGSSRGSS2で自機から弾を発射させる処理を施してみます。

いや~、理解するまで結構時間がかかってしまいました。

いままでの処理を、難度Cとするなら、今回は難度Bですね。

いつものように、誤解して理解をしている可能性もありますが(!?)

間違っていると分かったときは、すぐに訂正致しますのでご了承ください。

勢いで、思いのままを書き殴り、

そして、後でこっそり訂正記事を書く。

それが「あひるの水面下」クオリティ!!!  Orz<ゴメイワクをオカケシマス

手探りで勉強している状態なので、こればっかりはどうしようもないです;

 

それでは今日も、RGSS研究室さんのサイトを確認しながら作業を進めます。

まずはpictureフォルダに、弾の画像(bullet.png)を格納し、

そして、弾クラスを作成します。

尚、以下スプリクトは、ツクールXPのRGSSで打ち込んでいます。

 

弾クラス(Stg_bullet)

これは、まったく問題ないですね。

initializeメソッドに引数がついているのは、

自機と同じ場所に位置情報を獲得するためで

.dispose」を使用するのは、画面外に出た弾を消去するため。

32行目の部分の「screenout?」メソッドは

画像が画面外へ飛んだときに、trueを返し、それ以外はfalseを返すメソッドです

いままでを振り返れば、すぐに理解できる部分ですね。

 

さて、問題はココからです。

Aボタンを押したときに、

弾クラスを、自機の座標に呼び出しアニメーションをさせるという処理を

シーンクラスに記します。ここを理解するのに苦労しました。。。

順を追って整理したいと思います。

 

▼前回作ったシーンクラス(Scene_stg)に追記。

まずは、ゲーム中「Aボタン」を押した時に

自機の場所に弾のグラフィックを表示させるスプリクトを作成しました。

28行目から、自機のショットを管理するメソッドを書き込んでいきます。

 

▼実行結果(弾が動かない・・・)

2008081901.gif

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Aボタンを入力したら、弾の画像は表示されますが、

弾が動かないため、何のゲームだか分からない状態となっています。

気分はペイントソフトと言ったところでしょうか。

 

さて、自機から発射されても動かない弾なんて、

単なるハナクソにしかすぎないので、

一発一発、発射される弾をなんとかして動かしてみます。

 

シーンクラス(Scene_stg)

▼弾クラス(Stg_bullet)

自機クラスと、メインクラスは、前回と全く同じものをつかっています。

 

・・・さて、スプリクトを提示しても、何をやっているのかよく分からないので

一つづつ、細かく確認をしていこうと思います。

コチラにしっかりとした、解説がありますので

このブログの文章を読むより、

リンク先の説明を読んだほうが効率がいいと

思いますが、まぁそれでも進めていきます。

 

まず、シーンクラスのスプリクト10行目に

弾、一発一発を格納するための配列「@shot」を用意しました。

それぞれの当たり判定、移動処理を今後設定していくので、

一発一発、それぞれをしっかり管理するためという意味でしょう。きっと。

 

2008081902.gif

 

 

 

 

 

イメージとしては、こんな感じでしょうか?

シーンクラスの10行目でこんな感じの箱を用意しています。

そして、シーンクラスの25行目。

19行~30行のループ処理の間に、自機のショットを管理する

player_shot()

の命令が記されています。

これで、ゲームプレイ中は、いつでもボタンを押すことにより

player_shotメソッドを実行させることが出来るようになりますね。

 

さて、ここで仮に、

player_shotメソッドの実行条件であるAボタンが押されて、

弾が4つ発射されたとします。

41行目のArrayのメソッド「.push」の命令のおかげで、弾一つ一つそれぞれが

順番に配列の末尾に追加されていきますので

配列「@shot」の様子はこんな感じに変更されます。

 

2008081903.gif

 

 

 

 

 

手抜き画像ですいません(笑)

上記の図のように、弾一つ一つが、配列によって管理されます。

そして、シーンクラス38行目の

@shot_reject!{ | i | i ,move} という

命令により、配列「@shot」に存在する要素すべてに、

弾クラスの移動処理を実行するメソッド、「move」処理を施します。

 

--------------------------

reject

各要素に対して、ブロックを評価し、その値がfalseであった要素を集めた新しい配列を返します。

reject!

key と value を引数としてブロックを評価した値がtureである時、その要素を配列から削除します。

--------------------------

 

さて、この4つの弾の中の1つが

画面外に行きました。

その時、「@shot」の中身はこのように変化していきます。

 

2008081905.gif

 

 

 

 

 

 

 

 

 

 

 

 

と、このように、配列全体にずっと「.move」をかけて、画像を動かしながら、

弾を生成したり、削除したり。

そして、その度に配列を書き換えたりしながら、弾の処理を実行しています。

・・・うーん、人に説明するのって上手くできないものですね;

こんな説明で、しっかり伝わってるか不安だ。。。

というか、本当に上記の説明で合っているのかも不安だったり、、、(ヲイw

 

弾の量が多すぎるので、

最後に、弾の発射感覚を空ける処理をして

シーンクラス37~41行目)、、、完成です!

 

▼実行結果。センスない自機から、センスない弾が発射されました

2008081906.gif

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

うーん、予想どおり、上手く説明ができなかったかな。。。orz

まぁ、コチラのほうにしっかりとした説明が掲載されていますので、

そちらの方を確認してください。

自分は、もうちょっと国語の勉強をしておきます(泣)

 

<RGSS2>

▼自機クラス(Stg_player)

 

シーンクラス(Scene_stg)

自機クラスと、メインクラスは、前回と全く同じものをつかっています。

トラックバック(0)

このブログ記事を参照しているブログ一覧: RGSS,RGSS2で弾を発射させる

このブログ記事に対するトラックバックURL: /96

コメントする

このブログ記事について

このページは、87が2008年8月20日 02:27に書いたブログ記事です。

ひとつ前のブログ記事は「訂正記事(クラスをいじってみる)」です。

次のブログ記事は「<RGSS2>シューティングで敵を出現させる<RGSS>」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01