回転砲台実装 ~その2~
では、回転運動する砲台をプログラムしてみます。
まず、この敵に関しては今までの敵のようにスケジュールに書き込んで出現させる形はとりません。
なぜかというと、共通の中心点によって位置の決まる複数の砲台を一発で出現させるからです。
ステージに1度限りのこの砲台のためにスケジュールデータに新しいデータ枠を追加するのは、読み込みや敵データの初期化など沢山の関数を書き換えなければならないため効率が悪いです。
出現するタイミングになったらメインループから呼び出して全砲台をいっきに初期化する(出現させる)方法を選びました。
特別イベント的な扱いです。
メインループに特定のフレーム数に到達したら、回転砲台初期化関数を呼び出す処理を加えました。
次に全砲台共通で使う、回転運動の中心点の変数を構造体にして宣言します。
中身は、中心座標 X、Yと、現在回転砲台は有効かどうかを表すusedフラグです。
回転砲台が現れたらフラグは有効(TRUE)になり、その間中心座標はスクロールに合わせて左へ移動します。
画面に砲台が入らない位置まで移動したら無効(FALSE)になります。
次に、回転砲台を初期化する(出現させる)関数を書きます。
とりあえず一機のみ表示してみる形ですが、今後少しずつ角度をずらして複数の砲台をここでまとめて出現させる事になります。
今はとりあえず破壊不可能にするため、堅さ(def)を大きめにとっています。
シータスピードを1にしているので、1フレームに1度ずつ回転することになります。
さあ、次はいよいよ円運動の実装です。
と、おおげさに言ってみましたが円周の座標を求める方法を理解していれば、超シンプルな関数で実装できます。
円運動のパターン番号は10なので、変数MovePat が10の敵機は1フレームに1回この関数に飛ばされます。
最初、角度をプラスしていったら、思っていたのと逆に回ってビビッタのは内緒です(笑)
一般的な数学の座標と画面の座標はY方向に反転しているので、たまにこのような現象に驚かされます。
この記事を書いていて気付きましたが、角度が0になったら360にする処理は無駄ですな(汗)
まあ、細かい事は気にせず・・・。
円運動を実現する関数はたったこれだけの処理で実装できます。
ここにあった砲台が回転して・・・
ここにきます。
動画じゃないとわかりずらいですが、ちゃんと回転しています。
あとは動きを見ながら中心の位置や半径を少しずつ調整して、ここにアップしたようなコードになるわけです。
さあ、次は砲台が常に円の中心方向を向くようにしましょうか!
うわー!今、思い出した!
コアの存在を!
絵、描いてねえし・・・orz
- ABOUT
- カレンダー
04 | 2025/05 | 06 |
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 | 31 |
- 最新コメント
- プロフィール
はい。
- ブログ内検索
- カウンター
- アクセス解析