我正在尝试运行我的游戏Space Invaders,但我遇到了图形问题。要玩游戏,你可以用左击按钮射击枪,这会触发一个新的线程,它接受子弹的当前X位置,拔出子弹,然后睡觉并用背景颜色覆盖子弹。这继续循环以使子弹移动。我有问题'掩盖'子弹。
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找到我的代码。
答案 0 :(得分:1)
计算将结果放入队列(或某些线程安全容器)的各种线程中需要什么,然后在一个线程上进行屏幕更新。如果GUI库不是线程安全的话,这可能会省去一些麻烦。 - shuttle87