サンプルコードのダウンロード
では、まずサンプルコードをダウンロードし、解凍してください。
私は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); }
今回のプログラムは簡単なので、すぐに解ると思います。
下から順番に表示しつつ、新しく表示される部分は上から降ってくるかのように表示する、というよくあるやつですね?