RGSS,RGSS2で敵から弾を発射させる(WAY弾)
今回は、扇状に広がる自機狙い弾(Nウェイ弾)の実装をしていこうと思います。
三角関数の応用で出来るようですね。
ここまでくると、結論から言ってしまえば・・・・
理屈なんて全く考えないで、
こう入力したら、こういう結果となる!!
と、進めてしまうのがいいかなと、判断します。
理屈を考えて理解したら、
後々、応用も利くし役にたつのですが、
今は、理屈よりプログラムを組んでゲームを実装することが大優先ですし、
WAY弾は、RPGを作るうえでは、役に立ちそうもないので、
理屈を考えるのは、ヤメにしてさっさと進もうとおもいます。
▼スプリクトは以下のようになります。
------------------
●弾クラス(Stg_bullet) ※更新!
●敵クラス(Stg_enemy) ※更新!
●シーンクラス(Scene_stg) ※更新!
●(メインは省略します)
------------------
上記のスプリクトのシーンクラスですが、
一行の文章量が多いため、二行にわたって表示されている部分があり、
見にくくなっていますが、ご了承ください。
まず、弾クラスの39~49行目
------------------
when 3
#敵が撃つ弾、Nウェイ弾
self.bitmap = RPG::Cache.picture("e_bullet")
@dx = 8
@dy = 8
@spx = 6
@spy = 6
@spx = @spx*(target_x-x) / Math.sqrt((target_x-x)**2+(target_y-y)**2)
@spy = @spy*(target_y-y) / Math.sqrt((target_x-x)**2+(target_y-y)**2)
@spx = @spx * Math.cos(rad) - @spy * Math.sin(rad)
@spy = @spx * Math.sin(rad) + @spy * Math.cos(rad)
------------------
の部分で、弾の運動内容を入力します。
ベースは、自機狙い弾と一緒ですね、後半、ちょっと複雑な処理をしてそうですが、、、
それで、敵クラスの92~96行目
------------------
when 3
#30フレームに一回弾を発射
if @count % 30 == 0
return 3
end
------------------
の部分で、敵の出現から30フレーム経過したあとに、
「3」を返すメソッドを用意して、
シーンクラスの117~120行目の
------------------
if type == 3
@enemyshot.push Stg_bullet.new(i.x, i.y, type, @player.x, @player.y, -0.3)
@enemyshot.push Stg_bullet.new(i.x, i.y, type, @player.x, @player.y, 0)
@enemyshot.push Stg_bullet.new(i.x, i.y, type, @player.x, @player.y, 0.3)
------------------
ここで、敵のショット(3way弾)を実装しています。
赤文字で表記した数字の部分の単位には、ラジアンが使われているので
「マイナス1(-180度)」 ~ 「プラス1(180度)」
を入力して、扇の大小を決めます。
つまり、
扇を大きくしたい場合は「値を 1 または -1 に近づける」
扇を小さくしたい場合は「値を0に近づけれる(0を入力すると自機狙い弾)」
ということだけ抑えておけば、問題なさそうですね。
今回は、理屈を考えないで先へ進みましたが、
それはそれでアリだと自分は思っています。
ま、必要になった場合は、調べることになりますけれども。。。(泣
次回は、回転弾の実装をしていきたいと思います。
トラックバック(0)
このブログ記事を参照しているブログ一覧: RGSS,RGSS2で敵から弾を発射させる(WAY弾)
このブログ記事に対するトラックバックURL: /104

コメントする