chenqi5624 2015-02-14 16:54
浏览 713

DirextDraw双缓冲问题,出现重叠

明明清除了视频内存中的数据,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);
}

结果图片
结果图片

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
    • ¥30 线性代数的问题,我真的忘了线代的知识了
    • ¥15 有谁能够把华为matebook e 高通骁龙850刷成安卓系统,或者安装安卓系统
    • ¥188 需要修改一个工具,懂得汇编的人来。
    • ¥15 livecharts wpf piechart 属性
    • ¥20 数学建模,尽量用matlab回答,论文格式
    • ¥15 昨天挂载了一下u盘,然后拔了
    • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
    • ¥20 易康econgnition精度验证
    • ¥15 msix packaging tool打包问题