2

我有一个我正在开发的游戏的功能:

void DrawMap()
{
BITMAP bm;
PAINTSTRUCT ps;
HBITMAP sprites = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_COLOR_SPRITES));
HDC hdc = BeginPaint(hWnd, &ps);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, sprites);
GetObject(sprites, sizeof(bm), &bm);

// Find x and y coordinate for the top left of the visible screen
int x = 4, y = 4, ypos = 0;

// Draw lower layer
for (int i = 0; i < 9; i++)
    for (int j = 0; j < 9; j++)
        BitBlt(hdc, (i * 32) + 36, (j * 32) + 36, 32, 32, hdcMem, game.get_pos(game.Layer_One[x + i][y + j], ypos), ypos, SRCCOPY);

// Draw upper layer
for (int i = 0; i < 9; i++)
    for (int j = 0; j < 9; j++)
        if (game.Layer_One[x + i][y + j] != 0)
            BitBlt(hdc, (i * 32) + 36, (j * 32) + 36, 32, 32, hdcMem, game.get_pos(game.Layer_One[x + i][y + j], ypos, true), ypos, SRCCOPY);

SelectObject(hdcMem, hbmOld);
DeleteDC(hdcMem);
EndPaint(hWnd, &ps);
}

变量“游戏”是我为保存所有游戏变量和函数而创建的一个类的实例。基本上,这两个分组的 for 循环应该做的是创建一个由 32 x 32 像素瓦片组成的双层 9 x 9 网格,这些瓦片是从将所有瓦片放在一个位置的图像中复制而来的。我已经测试了我的 get_pos() 函数,它为完整精灵位图中的部分位图返回正确的 x 和 y 位置。
get_pos() 的第二个参数是通过引用 - 因此它可以以这种方式给出 y 值并返回 x 值。出于某种原因,我的函数,虽然对我来说似乎正确设置(并且肯定被调用)并没有在 hWnd 上产生任何绘图。我做错了什么?

4

1 回答 1

-1

它不会直接回答您的问题,但如果您不需要与非常旧的 Windows 版本兼容,为什么不使用 Direct2D?GDI 已被弃用(更不用说速度慢了)。

于 2012-12-25T10:42:00.783 回答