第11章 ゲーム制作における画像データの使い方を学ぶ

11-4 開放処理について

ゲーム終了時、作成したサーフェイスはReleaseDraw関数内ですべて開放してからプログラムを終了している。また、ゲームの場面によってサーフェイスを切り替える場合など、既存のサーフェイス内を一度クリアしてから再構築する。
このように、オブジェクトを開放するという処理は結構多い。
例えばゲーム画面背景用サーフェイスなどの開放は、次のように行っている。

if (g_pDDSGame != NULL) // ゲーム背景画像用サーフェイス
{
  g_pDDSGame->Release();
  g_pDDSGame = NULL;
}

これは、マクロを使うと次のように簡単に記述できる。

#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
  ・
  ・
  ・
SAFE_RELEASE(g_pDDSGame) // ゲーム背景画像用サーフェイス

※マクロを使ったので、一行で記述できた

このマクロをmyDraw.cppに設置すると、ReleaseDraw関数を次のように修正できる。

//-----------------------------------------------------------------------------
// 関数名 : ReleaseDraw()
// 機能概要: Direct Draw オブジェクトの削除
//-----------------------------------------------------------------------------
void ReleaseDraw(void)
{
    SAFE_RELEASE(g_pDDSStr);
    SAFE_RELEASE(g_pDDSBackImg);
    SAFE_RELEASE(g_pDDSChara);
    SAFE_RELEASE(g_pDDSPrimary);
    SAFE_RELEASE(g_pDD);

}

※g_pDDの開放がちょっと違うが、まあ問題ないだろう・・・

また、このマクロをcommon.hにおいておけば、すべてのソースから利用できる。サーフェイスの開放をよく行うプログラムを作る場合は、これを使うと便利だろう。


[ TOP ]