带空间入侵者的C ++图形更新

时间:2015-07-22 13:06:47

标签: c++ windows graphics

我正在尝试运行我的游戏Space Invaders,但我遇到了图形问题。要玩游戏,你可以用左击按钮射击枪,这会触发一个新的线程,它接受子弹的当前X位置,拔出子弹,然后睡觉并用背景颜色覆盖子弹。这继续循环以使子弹移动。我有问题'掩盖'子弹。

The extra uncovered bullets are shown in red

void bullet(int startpos1, int startpos2, HWND hwnd)
 {
int starty1 = 500;
int starty2 = 460;

while (starty2 > 0)
{
    starty1 = starty1 - 5;
    starty2 = starty2 - 5;
    PAINTSTRUCT ps;

    SetDCPenColor(hdc, RGB(255, 255, 255));
    SetDCBrushColor(hdc, RGB(255, 255, 255));
    SelectObject(hdc, GetStockObject(DC_BRUSH));
    SelectObject(hdc, GetStockObject(DC_PEN));
    Rectangle(hdc, startpos2, starty1, startpos1, starty2);

    Sleep(50);

    SetDCPenColor(hdc, RGB(0, 0, 0));
    SetDCBrushColor(hdc, RGB(0, 0, 0));
    SelectObject(hdc, GetStockObject(DC_BRUSH));
    SelectObject(hdc, GetStockObject(DC_PEN));
    Rectangle(hdc, startpos2, starty1 , startpos1, starty2 );
    UpdateWindow(hwnd);


 }
}

hdc是我窗口句柄的全局变量。您可以在http://pastebin.com/Jd3jmf8w找到我的代码。

1 个答案:

答案 0 :(得分:1)

计算将结果放入队列(或某些线程安全容器)的各种线程中需要什么,然后在一个线程上进行屏幕更新。如果GUI库不是线程安全的话,这可能会省去一些麻烦。 - shuttle87