[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
無題
ボス戦では、通常ステージの時と違い、ボスと正面から対峙するようにカメラが回転します。
見た目が派手になるし、3Dステージにした効果が出せるしベロシティマップのエフェクトがいい感じになるし、実においしいです。
操作面の観点から見ても、ボス戦では真ん中に照準を合わせていれば自動的にボスを狙う感じになってくれるので、避けることに集中しやすくなってます。
だいぶゲームとしての体裁が整ってきたので、そろそろ1面のステージとボスと通して遊べるようにしてみたいです。
無題
新しいステージとオプション関係を作ってました。
今回はマウス使うので、フルスクリーンの方が色々とやりやすいです。
あと、弾のスピードに関してですが、当初の構想よりだいぶ遅くなりそうです。
敵の弾が速いと避けるので精一杯になってしまい、照準を合わせるのが辛いためです。
というより、照準を合わせてるときに速い弾が来ると、気付いたときにはもう当たってるというケースが多々ありました。
避ける時と狙う時の意識の切り替え時間がないと辛い感じです。
まぁ、上手い人なら全く問題なくやっちゃうんだろうとは思いますが。
頂点バッファの整理中
あまり進んでない感じですが、描画用ポリゴンのデータ群を整頓して、描画コールを抑えようと色々いじってました。
DirectXを触ったことがある人なら分かると思いますが、DirectXは描画コールがやたらと重くてそれがかなりのオーバーヘッドになります。
テクスチャを切り替える場合とかは仕方ないですが、可能な限りポリゴンをまとめて一度の描画コールでたくさん描けるようにプログラムを組んであげるといい感じになるのです。
しかし、ソートなどに処理を割きすぎるとCPUの方に負荷が掛かりすぎるので、その辺のバランスを見ながら調整していく感じです。
ゲーム仕様の方は、ボムに相当するシステムを実装。
といってもダメージは与えられないし弾消しもありません。
カーソル位置に一瞬で転移する緊急回避アクションになってます。
弾を撃ってくる相手の背後に一瞬で回りこんでボコボコに出来たりするとかっこいいかもしれません。
無題
ようやく敵の攻撃を実装完了。
ステージ作成なんかもそろそろ進めたいですが、とりあえずその前に、オプションやメニュー関連を実装しとこうと思います。
綺麗な弾幕も好きですが、とりあえず避けてて楽しいものを目指したいです。
尤も、ステージ全体のプレイ時間をこちらで制御できないので、普通のSTGとは感じがずいぶん変わってしまうだろうとは思いますが。
弾幕制御
弾幕というほど弾は出ませんが。
ちょっとこんがらからないうちに仕様を整理してみます。(つまりチラシの裏)
敵とその攻撃オプションの構造体定義は以下の4種
・敵の種類ごとの定数パラメータセット
リアルタイムでは変動しない、ライフやアニメーションの参照データ。
外部ファイルに定義されたパラメータをメモリ内にストックする。
・攻撃オプションの定数パラメータセット
弾の画像、スピード、Way数などの基本値、及び1ループ内におけるその変動値のパラメータ。
・個別の敵オブジェクトデータ
ライフ、位置など、リアルタイムで変動する敵データを保持。
初期化時にパラメータセットのポインタをセットし、以降はそれを参照する。
攻撃オプションは複数を保持し、スレッドステートのON/OFFを切り替えることで攻撃を制御する。
・個別の攻撃オプションデータ
敵オブジェクトに配列として内包され、弾の発生を直接的に制御する。
基本パラメータは上記のパラメータセットにあるので、タイムカウンターやスレッドステートのみを持つ。
敵パラメータ
|
敵オブジェクト
L 攻撃オプション
|
オプションパラメータ
敵、攻撃オプションの基本パラメータはステージの変更時にステージスクリプトにしたがってロード。
……書いてみるとすごい単純だ…
コーディングしてるとポインタが蜘蛛の巣のごとく張り巡らされてるような感覚になってしまうんですけどねー。
実装し終わったら、一度コードを整理しないと後々面倒なことになりそうです。
とりあえず、これらの実装は一通り終わっているので、後は攻撃オプション内部の弾生成を実装すれば敵の弾が出てくる…と思う(不安)
デコードおわた
やっとogg再生のカプセル化が終わった・・・
基礎知識が少ないためめちゃくちゃ苦労しました。
サイズの小さい効果音とかならともかく、BGMなんかはサイズがでかすぎてVRAMの確保が失敗するので
やむなくストリーミング再生を実装する羽目に。
実装にあたっては、vox.dllというoggvolbis再生用dllのソースコードを参考にさせて頂きました。
それにしても、oggのデコードはやっぱ重いです。
マルチスレッドにして負荷を分散させてるんですが、それでも目に見えてスリープ時間が減ってます。
ネットで配布する場合は仕方ないですが、CDなんかで配布する場合はwav形式を使った方が動作そのものは快適かもしれません。
フレームレートが下がってる訳じゃないので許容範囲内ではあるんですけどね。
ちなみにマルチスレッドは、これまではなんかデットロックが怖くて敬遠してきたのですが、今回色々勉強できたので幾つか他の処理系にも組み込んでみました。
効果が大きいのはやはり読み込み関連の処理で、今までは大きな画像ファイルを読み込むときに一瞬固まるような感じになっていたんですが、今回の変更で大幅に改善されました。
具体的には、メインスレッドから画像のロードを要求された時に、一旦画像メモリのポインタを内包したクラスを生成して返還し、内部の読み込み処理は別スレッドで独立して行われるような流れになってます。
それにしても、やっぱ音があると臨場感が段違いに変わりますね。特にアクション要素のあるゲームは。
さて、続き頑張ってこよう。