明明清除了视频内存中的数据,Flip绘制时为何绘制的时候出现重叠,当设置位置为(600,400)时,如绘制的图像FPS=1 与FPS=2重叠...后续的绘制不断重叠,如果绘制的坐标(0,400)较小时不会出现重叠现象,求解答!
在这里书写代码片
while(TRUE)///主循环
{
if(::PeekMessage(&msg,NULL,0 ,0 ,PM_REMOVE))
{
if(msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//////////////the game processing goes here
else
{
static char info[10];
memset(info,0,10);
sprintf(info,"FPS=%0.0f",++Fps);
CGAME::Game_Main(info,1);//绘制图像
}
}
///////CGAME::Game_Main函数
int CGAME::Game_Main(void* parms,int num_parms )
{
CDX_::lpddsd = new DDSURFACEDESC2();
DDRAW_INIT_STRUCT(CDX_::lpddsd);
CDX_::lpddsback->Lock(NULL,CDX_::lpddsd,
DDLOCK_SURFACEMEMORYPTR|DDLOCK_WAIT,
NULL);
UCHAR* back_buffer = (UCHAR*)CDX_::lpddsd->lpSurface;
//////清除了内存
if(CDX_::lpddsd->lPitch == SCREEN_WIDTH)
memset(back_buffer , 0 ,SCREEN_WIDTH*SCREEN_HEIGHT);
else
{
UCHAR *dest_ptr = back_buffer;
for(int y =0 ; y<SCREEN_HEIGHT;++y)
{
memset(dest_ptr ,0 ,SCREEN_WIDTH);
dest_ptr+=CDX_::lpddsd->lPitch;
}
}///////填充backsurface
CDX_::lpddsback->Unlock(NULL);
///////绘制GDI,绘制的坐标为(600,400)
CGAME::GDI_DRAW((char*)parms,600,400,
RGB(rand()%255,rand()%255,rand()%255),CDX_::lpddsback);
while(FAILED(CDX_::lpddsprimary->Flip(NULL,DDFLIP_WAIT)));
Sleep(200);
delete CDX_::lpddsd;
CDX_::lpddsd = NULL;
return 1;
}
//////////绘制CGAME::GDI_DRAW使用GDI绘制
int CGAME::GDI_DRAW(char *text, int x,int y,
COLORREF color, LPDIRECTDRAWSURFACE7 lpdds)
{
HDC xdc;
if (FAILED(lpdds->GetDC(&xdc)))
return(0);
SetTextColor(xdc,color);
SetBkMode(xdc, TRANSPARENT);
TextOut(xdc,x,y,text,strlen(text));
lpdds->ReleaseDC(xdc);
return(1);
}