首页 新闻 会员 周边

关于C++绘图的问题

0
悬赏园豆:100 [待解决问题]

本人用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

FFFFFFFly的主页 FFFFFFFly | 初学一级 | 园豆:108
提问于:2019-05-31 18:35
< >
分享
所有回答(2)
0

你可以尝试每次只重绘更新的部分,或者调整一下刷新率。

ZXPrism | 园豆:202 (菜鸟二级) | 2019-08-07 12:04
0

只重画更新部分?

DreamcastleSystem | 园豆:18 (初学一级) | 2019-08-21 13:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册