Flimmern auf winapi



  • Hallo Leute,

    ich hab wegen dem problem schon ein paar stunden gegoogelt aber nich die lösung für mein problem:

    ich erstell in c/c++ eine oberfläche für ein kleines jump'n'run spiel und auf die oberfläche zeichne ich ein paar bilder. das führ dazu das diese oberfläche flimmert. Den kompletten Quelltext zu posten wär zu viel weil da schon was zusammengekommen ist:

    case WM_PAINT:{
                    PAINTSTRUCT   ps;
    
                    HDC           hDC;
                    HDC           hdcBuf=GetDC((HWND)picbg);
                    HDC           hdcMem= CreateCompatibleDC(hdcBuf);
                    SIZE          size;
                    char szKeyStatus[40];
                    int  iKeyLength;   
    
                    hDC = BeginPaint(hWnd, &ps);
    
                    SelectObject (hdcMem, picbg) ; 
                    BitBlt (hDC, 0, 0, 900, 600,  
                                            hdcMem, 0, 0, SRCCOPY) ; 
    
                    SelectObject (hdcMem, picstart);
                    BitBlt(hDC,stde[level][0][0]-worldX,stde[level][0][1]+worldY,80,100,hdcMem,0,0,SRCCOPY);
                    SelectObject (hdcMem, picziel);
                    BitBlt(hDC,stde[level][1][0]-worldX,stde[level][1][1]+worldY,80,100,hdcMem,0,0,SRCCOPY);
    
                    SelectObject (hdcMem, picholz) ; 
                    for (int i=0;i<hinder;i++)
                        BitBlt (hDC, area[level][i][0][0]-worldX, area[level][i][0][1]+worldY, area[level][i][1][0], area[level][i][1][1],  
                                        hdcMem, 0, 0, SRCCOPY) ; 
    
                    BitBlt (hDC, -worldX, 525+worldY, bitmap.bmWidth, bitmap.bmHeight,  
                                        hdcMem, 0, 0, SRCCOPY) ; 
                    if (worldX>50)
                       BitBlt (hDC, 500-worldX, 525+worldY, bitmap.bmWidth, bitmap.bmHeight,  
                                             hdcMem, 0, 0, SRCCOPY) ; 
                    if (worldX>250)
                       BitBlt (hDC, 1000-worldX, 525+worldY, bitmap.bmWidth, bitmap.bmHeight,  
                                             hdcMem, 0, 0, SRCCOPY) ; 
    
                    SelectObject (hdcMem, picman) ; 
                    BitBlt (hDC, posMan[0], posMan[1], bitmap.bmWidth, bitmap.bmHeight,  
                                        hdcMem, 0, 0, SRCCOPY) ; 
    
                    EndPaint(hWnd, &ps);  
                    DeleteDC (hdcMem) ;  
                    DeleteDC (hdcBuf);      
                    return 0;
             }
    

    normalerweise hilft es was folgendes zu schreiben:

    case WM_ERASEBKGND: return (1);
    

    was ich auch getan habe und das flackern ist auch schon besser geworden nur leider nicht ganz weg was aber mei mir auch ganz logisch ist.

    hat von euch jemand einen Vorschlag wie das Flimmern verschwindet. vielen Dank schonmal.



  • ok ich hab selbs einen weg gefunden:

    ich habe mir ein weiteres HDC (hdcall) erstellt in das ich alles zeichne
    und zum schluss kopiere ich diese adcall in mein hDC so dass alles auf einmal auf dem bildschirm erscheind

    🙂


Anmelden zum Antworten