Double Buffering(flimmerfreie Grafik)

  • VB6

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Gast.

    Double Buffering(flimmerfreie Grafik)

    Hi Leute,
    Habe ein Tetrisspiel programmiert, läuft nicht schlecht, nur wenn ich die Figuren um weniger als 10 Pixel fallen lasse, flackert es zu sehr.
    Wer kann mir sagen wie ich ein "Double Buffering" integriere um ein flimmerfreies Bild zu erhalten ?
    Pank`03
    Das kommt drauf an was du zur Grafikdarstellung benutzt,
    arbeitest du mit dem GDI ? Dann ist es (nach meinem
    Wissensstand) nicht möglich Double Buffering zu benutzen.
    Bei DirectDraw sieht das anders aus, da musst du
    erst ma einen BackBuffer anlegen und den mit
    der Primären oberfläche verbinden.
    Dann musst du nach dem Blt vorgang zwischen den
    Oberflächen mit Flip hin und her schalten,
    in Code siehst also so aus :


    Dim SurfaceDesc As DDSURFACEDESC2
    Dim PrimarySurface As DirectDrawSurface7 'Primäre anzeigefläche
    Dim BackBuffer As DirectDrawSurface7 'BackBuffer

    With SurfaceDesc
    .lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT 'Oberfläche soll Backbuffer count berücksichtigen
    .ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or _ 'Primäre oberfläche
    DDSCAPS_FLIP Or _ 'Die hin und her
    DDSCAPS_COMPLEX 'schalten kann
    .lBackBufferCount = 1 'BackBuffer count angeben für DoubleBuffering braucht man nur einen Backbuffer
    End With

    Set PrimarySurface = DirectDraw.CreateSurface(SurfaceDesc) 'Dann die Primäre oberfläche mit den Informationen erstellen

    SurfaceDesc.ddsCaps.lCaps = DDSCAPS_BACKBUFFER

    Set BackBuffer = PrimarySurface.GetAttachedSurface(SurfaceDesc.ddsCaps) 'Und die primäre obefläche mit dem Backbuffer verbinden

    'Hier kommt dein Grafik Code
    ...
    'Jetzt noch zwischen den Oberflächen hin und her schalten
    PrimarySurface.Flip Nothing, DDFLIP_WAIT 'Nothing, weil DirectDraw die Zeiger die auf die
    'verschiendenen oberflächen zeigen selbst vertauschen soll




    Hoff ich hab keinen Fehler gemacht, denn ich habs grad nich in VB ausprobiert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Unknown“ ()