サンプルコードのダウンロード

では、まずサンプルコードをダウンロードし、解凍してください。
私は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);
}

今回のプログラムは簡単なので、すぐに解ると思います。

下から順番に表示しつつ、新しく表示される部分は上から降ってくるかのように表示する、というよくあるやつですね?

記事検索

アーカイブ