|
|
发表于 2006-7-24 15:59:00
|
显示全部楼层
Re:游戏窗口闪烁
//******************************************************************
//初始化DirectDraw环境
BOOL InitDDraw(void)
{
DWORD dwFlags;
DDSURFACEDESC ddsd;
//创建DirectDraw对象
DirectDrawCreate(NULL, &lpDD, NULL);
//设置协作级别为窗口模式
dwFlags = DDSCL_NORMAL;
lpDD->SetCooperativeLevel(hWnd, dwFlags);
//创建主页面
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
lpDD->CreateSurface(&ddsd, &lpDDSFront, NULL);
//创建离屏页面
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
RECT rect;
GetClientRect(hWnd, &rect);
forewidth=rect.right-rect.left;
foreheight=rect.bottom-rect.top;
GetRect(&backrect, 65, 65, forewidth, foreheight);
ddsd.dwWidth = backwidth=forewidth+130;
ddsd.dwHeight = backheight=foreheight+130;
lpDD->CreateSurface( &ddsd, &lpDDSBack, NULL );
//创建地图页面
ddsd.dwWidth = 64;
ddsd.dwHeight = 64;
lpDD->CreateSurface( &ddsd, &lpDDSMap, NULL );
DDReLoadBitmap(lpDDSMap, "map1.bmp");
//创建飞机页面
ddsd.dwWidth = 50;
ddsd.dwHeight = 60;
lpDD->CreateSurface( &ddsd, &lpDDSPlane[0], NULL );
lpDD->CreateSurface( &ddsd, &lpDDSPlane[1], NULL );
lpDD->CreateSurface( &ddsd, &lpDDSPlane[2], NULL );
DDReLoadBitmap(lpDDSPlane[0], "left.bmp");
DDReLoadBitmap(lpDDSPlane[1], "center.bmp");
DDReLoadBitmap(lpDDSPlane[2], "right.bmp");
DDSetColorKey(lpDDSPlane[0],RGB(0,0,0));
DDSetColorKey(lpDDSPlane[1],RGB(0,0,0));
DDSetColorKey(lpDDSPlane[2],RGB(0,0,0));
//创建炸弹页面
ddsd.dwWidth = 14;
ddsd.dwHeight = 36;
lpDD->CreateSurface( &ddsd, &lpDDSBom[0], NULL );
lpDD->CreateSurface( &ddsd, &lpDDSBom[1], NULL );
DDReLoadBitmap(lpDDSBom[0], "bom1.bmp");
DDReLoadBitmap(lpDDSBom[1], "bom2.bmp");
DDSetColorKey(lpDDSBom[0],RGB(0,0,0));
DDSetColorKey(lpDDSBom[1],RGB(0,0,0));
//创建敌机
ddsd.dwWidth = 35;
ddsd.dwHeight = 35;
lpDD->CreateSurface( &ddsd, &lpDDSEnemy, NULL );
DDReLoadBitmap(lpDDSEnemy, "enemy.bmp");
DDSetColorKey(lpDDSEnemy,RGB(0,0,0));
//创建火焰页面
ddsd.dwWidth = 540;
ddsd.dwHeight = 50;
lpDD->CreateSurface( &ddsd, &lpDDSFlame, NULL );
DDReLoadBitmap(lpDDSFlame, "flame.bmp");
DDSetColorKey(lpDDSFlame,RGB(0,0,0));
//创建我机撞毁火焰页面
ddsd.dwWidth = 528;
ddsd.dwHeight = 66;
lpDD->CreateSurface( &ddsd, &lpDDSDead, NULL );
DDReLoadBitmap(lpDDSDead, "flamedead.bmp");
DDSetColorKey(lpDDSDead,RGB(0,0,0));
//创建敌机子弹页面
ddsd.dwWidth = 8;
ddsd.dwHeight = 8;
lpDD->CreateSurface( &ddsd, &lpDDSBall, NULL );
DDReLoadBitmap(lpDDSBall, "ball.bmp");
DDSetColorKey(lpDDSBall,RGB(0,0,0));
//创建我机子弹页面
ddsd.dwWidth = 5;
ddsd.dwHeight = 13;
lpDD->CreateSurface( &ddsd, &lpDDSBulet[0], NULL );
lpDD->CreateSurface( &ddsd, &lpDDSBulet[1], NULL );
DDReLoadBitmap(lpDDSBulet[0], "bulet0.bmp");
DDReLoadBitmap(lpDDSBulet[1], "bulet1.bmp");
DDSetColorKey(lpDDSBulet[0],RGB(0,0,0));
DDSetColorKey(lpDDSBulet[1],RGB(0,0,0));
//创建Clipper裁剪器
lpDD->CreateClipper(0, &lpClipper, NULL);
lpClipper->SetHWnd(0, hWnd);
lpDDSFront->SetClipper(lpClipper);
//取得当前路径
_getcwd( apppath, sizeof(apppath));
strcpy(openmidi, "play ");
strcat(openmidi, apppath);
strcat(openmidi, "\\a.mid");
strcpy(closemidi, "close ");
strcat(closemidi, apppath);
strcat(closemidi, "\\a.mid");
//播放midi
char buf[256];
mciSendString(openmidi, buf, sizeof(buf), NULL);
//开始游戏初始化
for (int k=0; k<ENEMYNUMBER; k++)
enemydead[k]=0;
enemylost=0;
planeremain=2;
gamestatus=GAME_LOG;
//设置定时器
SetTimer(hWnd, TIMER_CHANGEMAP, 20000, NULL);
return TRUE;
} |
|