小小小小号丶 2019-06-05 10:24 采纳率: 0%
浏览 377

关于C++桌面应用程序画图的问题

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

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
    • ¥15 gradio的web端页面格式不对的问题
    • ¥15 求大家看看Nonce如何配置
    • ¥15 Matlab怎么求解含参的二重积分?
    • ¥15 苹果手机突然连不上wifi了?
    • ¥15 cgictest.cgi文件无法访问
    • ¥20 删除和修改功能无法调用
    • ¥15 kafka topic 所有分副本数修改
    • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
    • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?