回転砲台実装 ~その2~
では、回転運動する砲台をプログラムしてみます。
まず、この敵に関しては今までの敵のようにスケジュールに書き込んで出現させる形はとりません。
なぜかというと、共通の中心点によって位置の決まる複数の砲台を一発で出現させるからです。
ステージに1度限りのこの砲台のためにスケジュールデータに新しいデータ枠を追加するのは、読み込みや敵データの初期化など沢山の関数を書き換えなければならないため効率が悪いです。
出現するタイミングになったらメインループから呼び出して全砲台をいっきに初期化する(出現させる)方法を選びました。
特別イベント的な扱いです。
メインループに特定のフレーム数に到達したら、回転砲台初期化関数を呼び出す処理を加えました。
次に全砲台共通で使う、回転運動の中心点の変数を構造体にして宣言します。
中身は、中心座標 X、Yと、現在回転砲台は有効かどうかを表すusedフラグです。
回転砲台が現れたらフラグは有効(TRUE)になり、その間中心座標はスクロールに合わせて左へ移動します。
画面に砲台が入らない位置まで移動したら無効(FALSE)になります。
次に、回転砲台を初期化する(出現させる)関数を書きます。
とりあえず一機のみ表示してみる形ですが、今後少しずつ角度をずらして複数の砲台をここでまとめて出現させる事になります。
今はとりあえず破壊不可能にするため、堅さ(def)を大きめにとっています。
シータスピードを1にしているので、1フレームに1度ずつ回転することになります。
さあ、次はいよいよ円運動の実装です。
と、おおげさに言ってみましたが円周の座標を求める方法を理解していれば、超シンプルな関数で実装できます。
円運動のパターン番号は10なので、変数MovePat が10の敵機は1フレームに1回この関数に飛ばされます。
最初、角度をプラスしていったら、思っていたのと逆に回ってビビッタのは内緒です(笑)
一般的な数学の座標と画面の座標はY方向に反転しているので、たまにこのような現象に驚かされます。
この記事を書いていて気付きましたが、角度が0になったら360にする処理は無駄ですな(汗)
まあ、細かい事は気にせず・・・。
円運動を実現する関数はたったこれだけの処理で実装できます。
ここにあった砲台が回転して・・・
ここにきます。
動画じゃないとわかりずらいですが、ちゃんと回転しています。
あとは動きを見ながら中心の位置や半径を少しずつ調整して、ここにアップしたようなコードになるわけです。
さあ、次は砲台が常に円の中心方向を向くようにしましょうか!
うわー!今、思い出した!
コアの存在を!
絵、描いてねえし・・・orz
一日の制作時間が大きく取れない中なので、少しずつ実装を進めたいと思います。
いままで、ひとつひとつの敵機の実装過程を細かく書いてこなかったので、ちょうど良いかなと。
ここまでのプログラムで敵の動きは10種類ほど実装してきました。
そのなかで自分なりに手順のテンプレートのようなものも現れてきたので、それにそって実装を進めたいと思います。
まず、今日は素材を用意します。
素材とはここでは絵のことです。
動きをプログラムした際に試しながら少しずつ数値を修正してゆくわけですが、その時に表示する絵がないとテストできません。
なので、僕は最初に面倒な素材作りをやってしまいます。
はっきり言ってテストするだけなら今までに描いてきたキャラを取り合えず代用しても良いのですが、いちおう動きにあった絵が欲しくなるのは単に僕の性分です。
変なこだわりのわりに絵自体は手抜き全開ですが(笑)
まずは背景を回転砲台まで描き進めます。
画面の円の部分が回転砲台になるイメージですな。
背景はとりあえず今までのパーツの流用です。
ここで問題が。
いままで背景を描くのにもドット絵エディタのEDGEを使っていたんですが、扱える画像サイズの限界横幅4000ピクセルを超えてしまいました。
そこでもう一本、普段趣味で絵を描く際に使っていたフリーソフトのPixiaを使ってみました。
画像サイズは今のところ問題なさそうです。
ドット絵を描くのには向かないソフトですが、背景はほぼ素材チップのコピー&ペーストで作っているのでこのソフトでも問題ありません。
この制作プロジェクトの途中で気付いたんですが、いくつかの素材チップを並べてマップを作るなら、プログラム的には一枚絵としての背景じゃなくても良かったですね。
素材チップひとつひとつをグラフィックハンドルに入れて、何時何処に表示するかを外部ファイルから読み込む形にした方がデータも小さくなります。
敵機の出現管理とやる事は一緒なので、実装はそんなに難しくないはずです。
ただ、制作途中はマップの全体像をすぐにツール上で確認でき、当たり判定の座標点も探しやすいんので、1枚絵もそれはそれで便利だったりします。
とりあえず、マップが完成するまで1枚絵で描いて、その後チップを順次表示してゆくプログラムを実装するのが良さそうです。
もしかしたら、このチャレンジの最後の方でやるかもしれません。
はい、次は回転砲台のドット絵です。
超がつく適当ぶりですが、こんなんでも絵が無いと動かせないのでいいんです!(きっぱり)
そもそも、ぷよのときにも繰り返し言いましたが見た目にこだわるつもりはあまり無いんです。
あくまで、シューティングゲームとして遊べるプログラムを1面分完成させるのが目標なので。
ゲームプログラミングの基本の基本を学びたくて名作をお手本として真似(音楽で言う耳コピー?)ていますが、所詮他人の作ったゲームなんで絵なんか作り込んでも意味が無いだろうと。
絵にこりだすと凄く時間がかかるので、今は時間が勿体無いです。
絵をきっちり描きたい気持ちはいつか作るオリジナルゲームまでとっておきます。
まあね、本気だしてもあんま変らんかもしれませんが・・・(汗)
さあ、素材も出来たし次はプログラムだ!!
とりあえず砲台ひとつで円運動させる実験でもしてみます。
画面右上の隙間から降下してきます。
で、左へ旋回、画面左方向へ真っ直ぐ飛んでゆきます。
敵機には出現してからのフレーム数をカウントする変数を持たせているので、『40フレームまで真っ直ぐ降下、その後X方向のベクトルを加算と同時にY方向のベクトルを減少、X方向ベクトルが一定値に到達したらY方向ベクトルは0にして水平方向の運動に移行』って感じで今回みたいな敵機の動きも楽に実装できます。
画面下の対空ミサイルと、もう少し先で天井に付いている固定砲台も実装して、これで回転砲台の手前までの敵機は全て完了しました。
難関、回転砲台に突入する前に実行ファイルをアップしておきます。
http://multip.net/view/N6dOXGEyWk
リンク先の四角い枠の下のほうにある『ダウンロード』をクリックでダウンロード出来ます。
ZIPファイルなので解凍してから、フォルダ内のexeファイルをダブルクリックで実行して遊んでください。
プログラムソースのテキストも同梱されています。
操作方法
自機移動 ・・・・ 矢印キー OR ジョイパッド方向ボタン
波動砲ため ・・・・ Zキー OR ジョイパッドAボタン を押しっぱなし
波動砲発射 ・・・・ Zキー OR ジョイパッドAボタン を離す
ESCキーでプログラム終了
自機が敵機や敵弾、背景と衝突した場合もプログラム終了
2機目の歩行戦車がちょうど足場が無くなって落下中です。
2機とも段差をトントンと降りて来ます。
久々の更新です。
忘れてたわけじゃないんだからねっ!(笑)
仕事の書類やレポートでエクセルとかPCは使っていたんですが、開発環境の起動は自粛していました。
ちょっと集中しなきゃならない仕事があって、たとえ息抜きのつもりでもコッチに手を付けるとどっちが息抜きかわからなくなる事は明白だったので。
ここ1、2週間は仕事モードに切り替えていました。
やっぱり継続してやってないとモチベーション下がりますね。
開発環境を起動するのにちょっと気合が必要でした(笑)。
はじめてしまえばそんな気持ちはあっさり消えましたが・・・。
今回の歩行戦車実装にあたって、背景との当たり判定を座標を渡して判定結果のみを返す関数にしておいた事が有効に作用しました。
移動に背景の影響を受ける敵機も、今後はサクサク実装できそうです。
- 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 |
- 最新コメント
- プロフィール
はい。
- ブログ内検索
- カウンター
- アクセス解析