ゲーム終了時、作成したサーフェイスは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においておけば、すべてのソースから利用できる。サーフェイスの開放をよく行うプログラムを作る場合は、これを使うと便利だろう。