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);
}

変数「game」は、すべてのゲーム変数と関数を保持するために作成したクラスのインスタンスです。基本的に、グループ化された 2 つの for ループが行うことになっているのは、2 層の 9 x 9 グリッドの 32 x 32 ピクセル タイルを作成することです。これは、すべてのタイルが 1 か所にある画像からコピーされます。get_pos() 関数をテストしたところ、フル スプライト ビットマップ内の部分ビットマップの正しい x および y 位置が返されました。
get_pos() の 2 番目のパラメーターは参照によるものです。そのため、そのように y 値を指定し、x 値を返すことができます。何らかの理由で、私の関数は、一見適切に設定されているように見えますが (そして確実に呼び出されています)、hWnd で描画を生成していません。私は何を間違えましたか?

4

1 に答える 1

-1

あなたの質問に直接答えるものではありませんが、非常に古いバージョンの Windows との互換性が必要ない場合は、Direct2D を使用してみませんか? GDI は非常に非推奨です (遅いことは言うまでもありません)。

于 2012-12-25T10:42:00.783 に答える