『弾幕 最強のシューティングゲームを作る!』 Q&A

以下の回答で問題が解決しなかった場合には、 こちらから ご連絡ください。

プログラミングに関する質問

2010/01/04
Q.
音楽を再生したい。
A.
 本書では音楽の再生については解説していません。ただし、CD-ROMのLibGameフォルダには音楽再生用のクラス(CMedia)が含まれています。このクラスの説明とサンプルは『シューティングゲームプログラミング』に収録されていますので、ご興味をお持ちの方は同書をご覧頂けましたら幸いです。
 CMediaクラスの簡単な使い方は以下の通りです。このクラスはDirectShowを使用しており、.wavファイルや.midファイルなどを再生することができます。ただし、ファイルによっては上手く再生できない場合があります。

(1) CMediaクラスのオブジェクトを生成します:
CMedia* BGMPlayer;
BGMPlayer=new CMedia();


(2) 音楽ファイルをロードします(音楽ファイルをフルパスで指定します):
BGMPlayer->LoadFromFile("c:\\MyGame\\Music\\Stage1.mid");

(3) ボリュームを設定して再生します:
BGMPlayer->SetVolume(1);
BGMPlayer->Play();

2010/07/29
Q. CMyShipやCBulletといったクラスごとに異なるoperator deleteを呼ぶには。
A.
クラスごとにoperator deleteを宣言します。
本書の場合、CMyShipでは次のようにoperator deleteを宣言します。

public:
void operator delete(void* p);

なお、CTaskではprivate属性でoperator deleteを宣言しています。

private:
void operator delete(void* p) {}

private属性にすることで、CTaskクラスに対するoperator deleteの呼び出しがコンパイルエラーになります。本書では派生クラスに対してoperator deleteを呼び出したいので、うっかりCTaskクラスのoperator deleteを呼び出すようなコードを書かないために、privateとしました。

2010/07/29
Q. CMyShipやCBulletといったクラスごとに異なるデストラクタを呼ぶには。
A.
基底クラスのCTaskで仮想デストラクタを宣言し、派生クラスのCMyShipやCBulletでオーバーライドします。
本書の場合、CTaskでは次のようにデストラクタを宣言します。仮想関数にするのがポイントです。

virtual ~CTask();

CMyShipやCBulletではデストラクタをオーバーライドできますが、本書では使わないので宣言していません。


最終更新 Friday, 16-Mar-2018 18:51:46 JST
トップページへ
©ひぐぺん工房   禁無断転載
最新刊『 おもしろまじめな AIスピーカーアプリをつくろう - Google Home(アシスタント) & Amazon Echo(Alexa)音声アシスタント開発 』