サンプルコードのダウンロード
では、まずサンプルコードをダウンロードし、解凍してください。
私はVisual C++6.0でコンパイルしているので、お持ちの方はVisual C++でプロジェクトファイルを開いてください(「effec_06.dsw」をダブルクリックすれば開けます)。
圧縮ファイルに含まれる「effec_06.exe」をダブルクリックし、実行してみてください(何かキーを押すと終了します)。
どうでしょう?画面が切り替わり、Takabo Soft Networkのロゴが下から徐々に表示されると思います。
というわけで、今回は徐々に画像を表示する方法を説明していきます。
早速サンプルコードの解説
今回の主なコードはこれ。
//----------[ メイン関数 ]----------------------------------------------------------------------
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow){
略
//DirectDraw開始
StartDirectDraw(hw);
//パレット設定
LoadPalette("takabo.bmp");
//ビットマップを作業用サーフェイスへ読み込む
LoadBitmap(lpWork,"takabo.bmp",0,0,612,145);
int count=1,i;
DWORD tim;
while(1){
tim=timeGetTime(); //疑似タイマー処理
//徐々に下から表示
if(count<=145){
ClearScreen(lpBack); //バックバッファ全消去
//既に表示済みのものを表示
Blt(lpBack,15,168+145-count,612,count,lpWork,0,145-count,FALSE);
//一番上に表示しているものを縦に連続させて表示
for(i=0;i<168+145-count;i++)
Blt(lpBack,15,i,612,1,lpWork,0,145-count,FALSE);
Flip(); //画面更新
}
//普通に表示
else {
ClearScreen(lpBack);
Blt(lpBack,15,168,612,145,lpWork,0,0,FALSE);
Flip();
}
count++;
if(count>300)
count=1;
do{ //メッセージループ
while(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)){
if(!GetMessage(&msg,NULL,0,0))
Quit();
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}while(timeGetTime()<tim+33); //1000/30=33.333(30FPS)
}
return(FALSE);
}
今回のプログラムは簡単なので、すぐに解ると思います。
下から順番に表示しつつ、新しく表示される部分は上から降ってくるかのように表示する、というよくあるやつですね?







