Probleme mit Offscreen-Surface
-
Ich fülle eine Offscreen-Surface namens "MapBackGround" mit lauter kleinen Bildern, damit ich für mein Spiel eine große Offscreen-Surface mit dem Bodentexturen hab. Beim Blitten auf den BackBuffer jedoch wird nur schwarz geblittet (es wird nicht gar nichts, sondern wirklich schwarz geblittet). Außerdem ist das Ganze SAULANGSAM. Was mach ich da falsch?
ZeroMemory(&ddsd, sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS; ddsd.dwWidth = MAP_SIZE_PIXELS; ddsd.dwHeight = MAP_SIZE_PIXELS; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; DDraw->CreateSurface(&ddsd, &MapBackGround, NULL); // Hintergrund-Surface füllen: for (a = 0; a >= MAP_SIZE_PIXELS; a += 100) // MAP_SIZE_PIXELS == 4000 { for (b = 0; b >= MAP_SIZE_PIXELS; b += 100) { SetRect(&SrcRect, 0, 0, 100, 100); if (a > MAP_SIZE_PIXELS - 101) SrcRect.right = MAP_SIZE_PIXELS - a; if (b > MAP_SIZE_PIXELS - 101) SrcRect.bottom = MAP_SIZE_PIXELS - b; BackBuffer->BltFast(a, b, GrasBackGround, &SrcRect, DDBLTFAST_WAIT); } } [...] void DrawBackground() { // ScreenX = Breite des Bildschirms SetRect(&SrcRect, ScrollX, ScrollY, ScrollX+ScreenX, ScrollY+ScreenY-150); BackBuffer->BltFast(0, 0, MapBackGround, &SrcRect, DDBLTFAST_WAIT); }
-
Original erstellt von Optimizer:
**// Hintergrund-Surface füllen:
for (a = 0; a >= MAP_SIZE_PIXELS; a += 100) // MAP_SIZE_PIXELS == 4000
{
for (b = 0; b >= MAP_SIZE_PIXELS; b += 100)
{
SetRect(&SrcRect, 0, 0, 100, 100);
if (a > MAP_SIZE_PIXELS - 101) SrcRect.right = MAP_SIZE_PIXELS - a;
if (b > MAP_SIZE_PIXELS - 101) SrcRect.bottom = MAP_SIZE_PIXELS - b;
BackBuffer->BltFast(a, b, GrasBackGround, &SrcRect, DDBLTFAST_WAIT);
}
}}[/code]**
Ändere mal deine beiden Schleifen von
for(a = 0; a >= MAP_SIZE_PIXELS; a+= 100) in
for(a = 0; a <= MAP_SIZE_PIXELS; a+= 100)
sonst wird da nämlich gar nichts geblittet.
Gruß
Fischi