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


Anmelden zum Antworten