ITPub博客

首页 > 应用开发 > > 关于C++绘图的问题

关于C++绘图的问题

作者:llittle 时间:2019-08-09 15:03:48 0 删除 编辑

本人用VS2017编写Windows桌面程序的俄罗斯方块,大概的原理就是根据地图来绘制图形,每移动一下都会把地图区域画成白板再根据新地图重新绘图,但是程序出现了一个BUG,那就是当格子数变多之后,程序的界面就跟卡住了一样,回到初始的界面,但是程序依然在运行,画图函数也依然在运行,地图也没发生改变,但画出来的就是白板,或者说画不出东西出来了。

这是画图的函数

void GMap::DrawGameMap(HDC &memDc)
{
    COLORREF color = RGB(0, 171, 255);
    for (int i = 0; i < MAPHEIGHT; i++)
    {
        for (int j = 0; j < MAPWIDTH; j++)
        {
            if (MapData[i][j])
            {
                int x = (OBJECTLENTH * 7) + j * OBJECTLENTH+WALLLENTH;
                int y = WALLLENTH + i * OBJECTLENTH;
                RECT rect;
                rect.left = x;
                rect.right = x + OBJECTLENTH;
                rect.top = y;
                rect.bottom = y + OBJECTLENTH;
                FillRect(memDc, &rect, CreateSolidBrush(color));
            }
        }
    }
}
这是画白板的函数

void GMap::DrawBlank(HDC &memDc)
{
    COLORREF color = RGB(255, 255, 255);
    RECT rect;
    rect.left = OBJECTLENTH * 7 + WALLLENTH;
    rect.right =17 * OBJECTLENTH + WALLLENTH;
    rect.top = WALLLENTH;
    rect.bottom = WALLLENTH + 20 * OBJECTLENTH;
    FillRect(memDc, &rect, CreateSolidBrush(color));
}
这是主循环的画图部分

if (GetTickCount() - t > 400 )
        {
            HDC hdc = GetDC(hWnd);
            temp->Down(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
            t = GetTickCount();
        }
这是CALLBACK WndProc函数的画图部分

case WM_KEYDOWN:
        if (wParam==VK_SPACE)
        {
            HDC hdc = GetDC(hWnd);
            temp->Translate(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
        }
        else if (wParam == VK_RIGHT)
        {
            HDC hdc = GetDC(hWnd);
            temp->MoveRight(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
        }
        else if (wParam == VK_LEFT)
        {
            HDC hdc = GetDC(hWnd);
            temp->MoveLeft(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
        }
        else if (wParam == VK_DOWN)
        {
            HDC hdc = GetDC(hWnd);
            temp->Down(Map);
            Map.DrawBlank(hdc);
            Map.DrawGameMap(hdc);
            ReleaseDC(hWnd, hdc);
        }
        break;

程序运行时候的图片

程序画不出图像之后的图片

之前做贪吃蛇的时候就没出现过这个问题,为什么这个刷新刷新着就画不出图了。。。急QAQ

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/813/viewspace-3158955/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    448
  • 访问量
    4364