STG

ガルーダガルーダ

久しぶりにPS2でエスプガルーダやってみた。久しぶりだけどなんとなく覚えているもんだ。まぁ、3面でゲームオーバーとかいうとんでもなくダメな結果だったんですけどね。 つーかパッドでシューティングって難しいよね。ジョイスティックかキーボードじゃな…

めざせお手軽で富豪的なSTGアーキテクチャー(24)

第23回を受けての描画インターフェース再考です。 フレームワーク側に用意したGmObject.Draw(描画関数)はオーバーライドすれば好きなようにいじれるので、実はそれほど深刻な問題ではないのです。たとえば強引に受け取ったIDrawer2Dを拡張したIDrawer2DExに…

めざせお手軽で富豪的なSTGアーキテクチャー(23)

スプライトバッチあれこれ。 たまには本当にXNAの話を書かないと看板に偽りあり!になってしまうので、2Dのゲーム開発で主に使用するスプライトバッチ(SpriteBatch)について理解したことを書いておこうかと思います。間違ったこと書いてたらごめんね。

途中経過

http://chlice.qee.jp/_up/c1221.jpg 敵&弾幕制御を充実させてミシャグジさま互換弾幕を実装。 ミシャグジさまは全方位64WAY(数えたわけじゃないから間違ってると思う)ぐらいの固定二門砲台。で、弾はしばらく進むと減速して滑らかに方向転換(たぶん90度)…

めざせお手軽で富豪的なSTGアーキテクチャー(22.1)

前回、さまざまなクラスに共通の機能を足すとき、デコレーターを書くんじゃーと言ったのですが・・・。 親クラスの種類がたいした数じゃなくて、追加される機能がちっさいときは、どう考えてもスパゲッティゆですぎの覚悟で全クラスのサブクラスとして機能を…

めざせお手軽で富豪的なSTGアーキテクチャー(22)

派生、派生、派生。 複数のクラスに同じ機能を追加した子クラスを作成するような場合、つまり、ライブラリ側にまっすぐ飛ぶだけの弾のクラスと、加速度に従って加速する弾のクラス、途中でカクッと曲がる弾のクラスがあるとして、それにゲーム特有の追加機能…

めざせお手軽で富豪的なSTGアーキテクチャー(21)

シーン管理の続き。 シーンAからシーンBに遷移する瞬間を考えます。

めざせお手軽で富豪的なSTGアーキテクチャー(20)

シーン管理について。 ここで言うシーンとは、「スプラッシュ」「オープニング」「ゲーム画面」「エンディング」「設定画面」エトセトラの画面遷移単位のことです。yanesdkやなんかのシーンとまったく同じものです(参考:天才プログラマ養成ギプス)。

途中経過

今日はタイトル画面、自機攻撃タイプ選択〜ステージ開始まで実装。これであとは敵を定義して配置するプログラムを書けばゲームの体裁は整う感じ。自機死なないけど。問題は絵だな・・・絵・・・ なんとなくライブラリ部分のソースコード置いておきますね。作…

めざせお手軽で富豪的なSTGアーキテクチャー(19)

Soundの基底クラスについて。 XNAでは音を鳴らすのにキューの名前しか要らないので、必要最低限の情報は何らかの文字列情報だけです。

めざせお手軽で富豪的なSTGアーキテクチャー(18)

サウンドマネージャの実装について。 各サウンドからは利便性を考えてPlayするだけの奴隷にしか見えないサウンドマネージャですが、BGMはひとつだけ鳴らしてループする〜などのSoundの特徴を解釈するのがこのクラスです。

めざせお手軽で富豪的なSTGアーキテクチャー(17)

サウンドマネージャについて。 前回作ったBGM,SE,Voiceの各クラス(Sound)はコンストラクタから、Soundクラスに静的に存在するManagerを呼び出すことで音が鳴ります。というわけでそのManagerことISoundManagerについて。

めざせお手軽で富豪的なSTGアーキテクチャー(16)

BGMと効果音の管理について。 とりあえず、どうやって音を鳴らすかってのは置いといて(XNAのオーディオエンジンを使うわけですが)、音を鳴らす要求をどう管理するかを考えていきます。

めざせお手軽で富豪的なSTGアーキテクチャー(15)

リプレイについて。

途中経過

http://chlice.qee.jp/_up/c1207.jpg 背景はパリの町並みfrom GoogleEarth。ボカシいれて雲を乗せてあります。ちゃんとスクロールします。操作系統はエスプガルーダ互換。Zがセミオート0.3秒、スペースバーが連射です。右下にゲージがあって、カスリで上昇し…

めざせお手軽で富豪的なSTGアーキテクチャー(14)

第二世代オブジェクトリストへの登録と削除について。

めざせお手軽で富豪的なSTGアーキテクチャー(13)

GmObjectの派生、自機クラスGmPlayer以外について。

めざせお手軽で富豪的なSTGアーキテクチャー(12)

GmObjectの派生、自機クラスGmPlayerについて。 GmPlayerは自機の基底クラスとなるもので、自機としての基本的な性質を備え、これを特化して具体的なパーソナリティを表現します。自機の基本的な性質はざっくり以下のように整理してみました。

めざせお手軽で富豪的なSTGアーキテクチャー(11)

GmObjectクラスの派生について考えます。

めざせお手軽で富豪的なSTGアーキテクチャー(10)

アクションの「状態」について。 待機したりシーケンシャルに弾幕を生成したりするアクションのように一瞬で終了しないアクションの場合、アクションの状態(経過時間とか)を保持する必要があります。そんな話。

めざせお手軽で富豪的なSTGアーキテクチャー(9)

アクションのCompositについて。 前回話に出てきたCompositパターンについて補足しておきましょう。

めざせお手軽で富豪的なSTGアーキテクチャー(8)

ステージに対する敵の配置・制御方法について。 STGではゲームの進行状態(開始からの秒数とかスクロール量)によって敵が画面上に現れます。 また、敵は自分の状態に従って弾を出したりします。 この二つの処理は「ステージ上に敵を配置するもの」もオブジェ…

めざせお手軽で富豪的なSTGアーキテクチャー(7.5)

画像の管理について。前回文章で説明した内容をコードで書くとこんな感じ。

めざせお手軽で富豪的なSTGアーキテクチャー(7)

画像素材(テクスチャ)の型について。 前回IDrawer2DにGmImageResourceなるクラスを渡す、と書きましたが、それの設計をします。 まずはじめに、XNAでテクスチャをどのように所得するかというと、ソリューション内のContentという謎のフォルダに画像ファイル…

めざせお手軽で富豪的なSTGアーキテクチャー(6)

描画インターフェースについて。 前回出てきた描画用インターフェースIDrawer2Dですが、これは拡大回転透過などの各種転送機能をインターフェースとしてまとめたもので、XNAのSpliteBatch.Drawを呼ぶクラス(つまりXna.Framework.Game派生クラス)あたりで実装…

めざせお手軽で富豪的なSTGアーキテクチャー(5)

制御と描画の周辺について。 オブジェクトの存在を管理する仕組みが前回までで出来上がったので、あとはそれらのタスク(制御処理と描画処理)を順次実行できるようにすればいいわけです。 XNAではモデルの操作はGame.Update、描画はGame.Drawという二つのメ…

めざせお手軽で富豪的なSTGアーキテクチャー(4)

オブジェクトの管理について。 生成されたオブジェクトを管理して、そいつらのタスク(制御処理と描画処理)を呼び出す係が必要になりますので、それをGmObjectManagerとでもしておきます。 GmObjectManagerへのGmObjectの登録ですが、生成をGmObjectManagerで…

めざせお手軽で富豪的なSTGアーキテクチャー(3.75)

インスタンスプールの続き。 ところで、メインループをぐるぐる回して全オブジェクトのUpdateメソッドのようなものを呼ぶ一般的なゲームプログラムの場合、画面外に出るなどしてインスタンスが破棄(Dispose)されるとき、前回書いたレベルの単純な方法では、…

めざせお手軽で富豪的なSTGアーキテクチャー(3.5)

オブジェクトの管理について。一応インスタンスプールの実装について考えておきましょう。 インスタンスプールはCreateInstance()がインスタンスを借りてくる借主になるクラスです。つまり、極論すれば貸し出し用と返却用のメソッドがあれば事足ります。 pub…

めざせお手軽で富豪的なSTGアーキテクチャー(3)

オブジェクトの管理について。 C#にはガベージコレクタという得体の知れない魔物が生息していて、こいつが活動すると予想外にパフォーマンスが落ちたりします。そうならないためにはインスタンスを破棄しない、つまりインスタンスプールのような仕組みが必要…