RGSS,RGSS2で敵から弾を発射させる(回転弾)
今日は、回転弾の実装を行いたいと思います。
この作業が終われば、とりあえず一段落といったところでしょうか。
キリがいいので、最後に、いままでの成果を動画にしてお送りしたいとおもいます。
今回も、理屈ぬきで進めて行きたいと思います。
かの有名な「ブルースリー」だって、こんな言葉を残しています。
「Don't Think Feel ! (考えるな、感じろ!)」ってね。
考えても、理解に苦しんでしまった場合は、
何も考えずに、とりあえず心のままに体を動かしてみる。とても重要です。はい。
というわけで、自己弁護もこのくらいにして(←最低w)
スプリクトの公開です。
------------------
●自機クラス(Stg_player) ※更新!
●弾クラス(Stg_bullet) ※更新!
●敵クラス(Stg_enemy) ※更新!
●シーンクラス(Scene_stg) ※更新!
●(メインは省略します)
------------------
今回の話題とは関係ないのですが、斜め移動時や、低速移動時に、
それぞれの方向の移動速度が違っていたのに気がついたので、
自機クラスも、こっそり修正しておきました。
次回にでも、内容を詳しく説明しようと思います。
今回は、いままで直線弾を撃っていた(赤い)敵に
回転弾を打たせるように指示しました。
シーンクラスの「rot」という変数に度数を入力して、
弾を出しているという理屈のようですね。
弾クラスの引数の数が、とんでもないことになってきました。
RGSS研究室さんの言葉をお借りすると、
rotに0~360の値を入れて360度系で弾の移動方向を指定し、
次のようにすると敵を中心に12発の弾が円状に発射されます。
------------------
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,0)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,30)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,60)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,90)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,120)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,150)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,180)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,210)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,240)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,270)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,300)
@enemyshot.push Stg_bullet.new(i.x, i.y, 4, 0,0,0,330)
------------------
そして、弾の計算は以下のようになります。
------------------
#敵が撃つ弾・回転弾
self.bitmap = RPG::Cache.picture("e_bullet")
@dx = 8
@dy = 8 #当たり判定の大きさ
@spx = 6
@spy = 6 #おそらく弾の速度
@spx = @spx * Math.cos(rot * Math::PI / 180)
@spy = @spy * Math.sin(rot * Math::PI / 180)
------------------
こうやってスプリクトだけ見ると分かりづらいですが、
今回は特別なことをしていないので、特に説明は不要かと思います。
結局は、打ち込んで何度も試していくのが、理解する一番の近道となりますよね。
▼実行結果
とりあえず、上の動画に
いままで使ってきた処理のすべての動作を行いました。
こうやって見てみると、
「ようやく、ここまできたんだな・・・」
という気持ちがふつふつと沸いてきますね!
敵が気持ち悪いのはご愛嬌ということで!!(笑)
トラックバック(0)
このブログ記事を参照しているブログ一覧: RGSS,RGSS2で敵から弾を発射させる(回転弾)
このブログ記事に対するトラックバックURL: /105

コメントする