まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ステージ3後半の戦艦を作成して行こうと思って、まず最初に登場させようと
思っていた回転砲台を作製してみました。
しかし、この回転砲台を実装するまでの道のりが長かった・・・
この、回転する敵で敵弾の発射位置が中心ではない場合の計算がややこしくて
しかも今回の場合、敵弾を撃っている時は回転しないようにしたので更に
ややこしくなってしまい、当初はゲーム用のスクリプトを使って作製していたのですが
訳がわからなくなってしまったので、いつものように簡単なスクリプトを作製して
考えてみました↓
回転砲台スクリプト
このスクリプトを動かすとこんな感じ↓
(たまに、回転が遅くてフラッシュに間に合ってませんが御愛嬌って事で^^;)
敵の動きとしては
1.自機の方向に向かって回転
2.レーザーを打つ前の前兆を表示(マズルフラッシュって言うんですかね?)
3.回転を止めてレーザーを発射
4.1に戻る
と言う感じにしたかったんです。
で、この場合に計算しなければならないのは、まずは本体が自機に向かって
回転する為の角度計算。
これは、es_ang ex+160,ey+160,px+18,py+18みたいな感じで出来ます。
次にマズルフラッシュを表示する為に、砲台の先端の座標を計算します。
これは、以前書いた回転する敵の弾の発射位置と考え方は同じで
先端座標に円を書くつもりで、座標の計算をします。
先端の座標がわかればレーザーの表示も、その座標から発射させれば良いので
問題ありません。
ですが、レーザーを撃っている時は敵は回転しません。
という事は、撃ち終わった後は自機の方向を向いていないという事になります。
ここで、メチャクチャ悩みました。
es_ang命令で敵の方向を変えると、パッと方向が変わってしまうので変です。
出来れば自機の方向までジワーっと方向転換して、自機の方を向いたら
その後は自機を追いかけて欲しいです。
どうするか考えました。
で、思いついたのがレーザーを撃っている時の角度を覚えておいて
レーザーを撃ち終わった後の敵と自機との角度を計算し
レーザーを撃っている時と、撃ち終わった後の角度を比べて
角度が小さければ砲台回転角度をプラス、角度が大きければ砲台回転角度をマイナスし
自機の方に向いたら、その後は自機を追いかける
と言う風にしてみました。
これで上手く行った!と思ったのもつかの間、まだ問題がありました。
es_angで角度を計算すると、一周を360度と設定している場合
下の方向が0(360)、右の方向が90、上の方向が180、左の方向が270になります。
この下の方向が0(360)ってのが厄介で、例えばレーザーを撃っている時の角度が320度で
レーザーを撃ち終わった時の角度が20度だったとすると
普通は320からマイナスしていくのですが、マイナスだと実は反対方向に回って
しまいます。
実際は320にプラスして、さらに360を超えた場合は0に戻してからプラスして
20にしないといけないんです。
色々と試した結果、レーザーを撃っている時の角度と撃ち終わった後の角度の差が
大体145以上と以下で、プラスとマイナスを逆転させないといけない事がわかりました。
う~ん、上手く文章で書くのって難しいですね・・・
で、それをスクリプトにしたのが、上記の回転砲台スクリプトです。
これを踏まえて、ゲーム用のスクリプトに移植したところ、上手く動くようになりました^^
ちゃんと、発射前の溜めも行います。
もっと簡単な実装方法もあるんではないかと思うのですが、とりあえず
今の所上手く動いているようなので、これで良しとしておきます^^;
思っていた回転砲台を作製してみました。
しかし、この回転砲台を実装するまでの道のりが長かった・・・
この、回転する敵で敵弾の発射位置が中心ではない場合の計算がややこしくて
しかも今回の場合、敵弾を撃っている時は回転しないようにしたので更に
ややこしくなってしまい、当初はゲーム用のスクリプトを使って作製していたのですが
訳がわからなくなってしまったので、いつものように簡単なスクリプトを作製して
考えてみました↓
回転砲台スクリプト
このスクリプトを動かすとこんな感じ↓
(たまに、回転が遅くてフラッシュに間に合ってませんが御愛嬌って事で^^;)
敵の動きとしては
1.自機の方向に向かって回転
2.レーザーを打つ前の前兆を表示(マズルフラッシュって言うんですかね?)
3.回転を止めてレーザーを発射
4.1に戻る
と言う感じにしたかったんです。
で、この場合に計算しなければならないのは、まずは本体が自機に向かって
回転する為の角度計算。
これは、es_ang ex+160,ey+160,px+18,py+18みたいな感じで出来ます。
次にマズルフラッシュを表示する為に、砲台の先端の座標を計算します。
これは、以前書いた回転する敵の弾の発射位置と考え方は同じで
先端座標に円を書くつもりで、座標の計算をします。
先端の座標がわかればレーザーの表示も、その座標から発射させれば良いので
問題ありません。
ですが、レーザーを撃っている時は敵は回転しません。
という事は、撃ち終わった後は自機の方向を向いていないという事になります。
ここで、メチャクチャ悩みました。
es_ang命令で敵の方向を変えると、パッと方向が変わってしまうので変です。
出来れば自機の方向までジワーっと方向転換して、自機の方を向いたら
その後は自機を追いかけて欲しいです。
どうするか考えました。
で、思いついたのがレーザーを撃っている時の角度を覚えておいて
レーザーを撃ち終わった後の敵と自機との角度を計算し
レーザーを撃っている時と、撃ち終わった後の角度を比べて
角度が小さければ砲台回転角度をプラス、角度が大きければ砲台回転角度をマイナスし
自機の方に向いたら、その後は自機を追いかける
と言う風にしてみました。
これで上手く行った!と思ったのもつかの間、まだ問題がありました。
es_angで角度を計算すると、一周を360度と設定している場合
下の方向が0(360)、右の方向が90、上の方向が180、左の方向が270になります。
この下の方向が0(360)ってのが厄介で、例えばレーザーを撃っている時の角度が320度で
レーザーを撃ち終わった時の角度が20度だったとすると
普通は320からマイナスしていくのですが、マイナスだと実は反対方向に回って
しまいます。
実際は320にプラスして、さらに360を超えた場合は0に戻してからプラスして
20にしないといけないんです。
色々と試した結果、レーザーを撃っている時の角度と撃ち終わった後の角度の差が
大体145以上と以下で、プラスとマイナスを逆転させないといけない事がわかりました。
う~ん、上手く文章で書くのって難しいですね・・・
で、それをスクリプトにしたのが、上記の回転砲台スクリプトです。
これを踏まえて、ゲーム用のスクリプトに移植したところ、上手く動くようになりました^^
ちゃんと、発射前の溜めも行います。
もっと簡単な実装方法もあるんではないかと思うのですが、とりあえず
今の所上手く動いているようなので、これで良しとしておきます^^;
PR
この記事にコメントする
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
リンク
カテゴリー
最新記事
(04/04)
(12/26)
(12/25)
(11/17)
(10/11)
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
最古記事