解答例を紹介する。実力でできた人のみ、自分のプログラムと比較し、参考にしてください。
努力無き者は見るべからず!!
//-----------------------------------------------------------------------------
// 関数名 : BackDraw()
// 機能概要: 背景描画処理
//-----------------------------------------------------------------------------
static void BackDraw(void)
{
HRESULT hRet;
RECT rcBack;
/* 1枚で描画できるかどうか? */
if (Back_Y < 480) // 2枚必要
{
// 下側に表示する画像の矩形をセットし、描画
SetRect(&rcBack, 0, 0, 640, Back_Y);
hRet = g_pDDSBack->BltFast(0, 480 - Back_Y, g_pDDSGame, &rcBack, DDBLTFAST_NOCOLORKEY);
if (hRet != DD_OK)
return;
// 上側に表示する画像の矩形をセット
SetRect(&rcBack, 0, (640 - 480) + Back_Y, 640, 640);
}
else // 1枚でOK
{
SetRect(&rcBack, 0, Back_Y - 480, 640, Back_Y); // 表示する背景の矩形をセット
}
/* 一枚絵、または上側の背景を描画 */
hRet = g_pDDSBack->BltFast(0, 0, g_pDDSGame, &rcBack, DDBLTFAST_NOCOLORKEY);
if (hRet != DD_OK)
return;
/* 背景の移動 */
Back_Y -= Back_Speed;
if (Back_Y <= 0)
Back_Y = 640;
} |