double buffering in C



  • Hallo.
    Ich brauche eine Funktion "DoubleBuffering", welche das Flimmern unterdrücken soll.

    Momentan benutz ich in meinen RPG(ähnlich Pokemon) eine Variante, wo die Gegenstände (Bäume, Felsen, etc...) nur durch leerzeichen ersetzt werden. und dann mit printf die neuen gemalt werden...
    Da entsteht halt das flimmern...

    Weis einer wie double buffering funktioniert?? in QuickBasic geht das ja einfacher:

    SCREEN 7,,0,1
    
    do
        ...
        pcopy 0,1
        cls
    loop
    

    Wer quickbasic kennt weis was für ein problem ich hab...



  • Hallo CaPGeti,

    da bist Du falsch gelandet, C weiß gar nichts dazu. Jetzt nicht doppelt posten, sondern laß das Thema von einem Mod ins Forum Spiele/Grafikprogrammierung schienem. 🙂



  • CaPGeti schrieb:

    ...
    Weis einer wie double buffering funktioniert?? ...

    Hi Bruder !
    Ja, weiß ich. Du schreibst Daten in einen Puffer1, während Daten aus einem anderen Puffer2, dessen Inhalt im Grafikspeicher abgebildet( gemapt ) ist, angezeigt werden.
    Du hast es also mit zwei Puffern zu tun ( double buffer ).
    Ist der Schreibvorgang im Puffer1 fertig, wird der Puffer1 in den Grafikspeicher gemappt und im Hintergrund kann der Puffer2 beschrieben werden.
    Das ganze wechselt sich also immer ab. Das ist die double buffer Technik.
    Mit C kann man also durchaus double buffering realisieren.
    MfG
    B.B.



  • CaPGeti schrieb:

    Weis einer wie double buffering funktioniert??

    naja, du musst sämtliche zeichenoperationen im RAM machen und dann, synchronisiert mit dem bildaufbau, beim strahlrücklauf oder so, mit einer schnellen kopieroperation in den bildwiederholspeicher kopieren. mit c hat das aber so direkt nix zu tun.
    🙂



  • na dann...mach ich mal los....

    Leider weis ich ni wie das funktioniert...
    Du kannst mir das nicht zufällig als code in c geben...



  • na du erstell dein Spielfeld zweimal:) un kopierst das eine in das andere abwechselnt in einem best. Interval.. und haut es dann auf den biuldschrim..



  • CaPGeti schrieb:

    na dann...mach ich mal los....
    Leider weis ich ni wie das funktioniert...
    Du kannst mir das nicht zufällig als code in c geben...

    wie stellst du dir das denn vor, es gibt 1000 millionen plus 2,4 möglichkeiten, was man so alles doppelbuffern kann.
    allein die beiden puffer mit c programmieren wird nicht reichen. du brauchst noch die verbindung zum betriebssystem.
    bei windows kannst du das zeug mit bitblt in die grafikkarte hauen. die anderen betriebssysteme werden da auch ihre eigenen funktionen haben.



  • CaPGeti schrieb:

    ...wo die Gegenstände (Bäume, Felsen, etc...) nur durch leerzeichen ersetzt werden. und dann mit printf die neuen gemalt werden...
    Da entsteht halt das flimmern...

    ist das ein konsolenprogramm ? welches betriebssystem ?
    da lässt sich bestimmt was machen, wenn du mehr infos rüber wachsen läst.



  • hmmm...jetzt, da ich mir das nochmal durchgelesen hab...hab ich ne ahnung wie ich das machen muss....allerdings kann ich ja nicht den "AnzeigePuffer" einfach per printf ausgeben, sonder muss ihn ja direkt irgentwie in den Grafikspeicher schreiben...hmmm

    Naja das da oben ist doof formuliert...aber ich weis das prinzip jetzt=)
    Ziemlich schwierig für einen der grad mal ein halbes jahr c lernt=)
    (und 3 jahre QB(HOBBY))

    na mal sehen wie die lehrer das sehen...

    edit: infos zum Spiel:
    Ja das ist ein Konsolenprogramm. Ich benutzt zur Programmierung winXP, winVISTA, win2000. zum proggen nehm ich nur DEVCPP
    Das spielfeld (ein Textarray) ist 1000 x 1000 felder groß und wird mit ascii zeichen bestückt... die 6 für nen baum, 177 für wasser, 176 für fels, usw...
    die figur ist immer in der mitte (y=12,x=40), man bewegt sich und dann ändert sich dazu der Bildschirm (scrolling(selbst gemacht=)),
    Story und so kommt später, erstmal die engine...
    Passend dazu hab ich nen mapeditor:
    - Speicher und Ladefunktion des 1000 x 1000 feldes (die map)
    - gemalt (gegstände gesetzt) wird mit der Maus, wenn man klickt. Gelöscht mit Rechtsklick
    - gescrollt wird an den bildschirmrändern mit der maus (wie strategiespiele ala c&c)
    - jo das wars...

    Wer fragen hat oder eine lösung zum oben genannten Problem hat bitte posten..

    lg CAPG



  • Die WindowsApi bietet für die Konsolenprogrammierung diverse Funktionen, die Console Functions.
    Die sind alle in der wincon.h deklariert, einbinden musst du dafür die kernel32.lib
    Du kannst mehrere Konsolenpuffer verwalten, wobei immer nur einer aktiv ist.
    Neue erzeugst du mit der Funktion CreateConsoleScreenBuffer und zwischen den Puffern hin- und herschalten kannst du mit SetConsoleActiveScreenBuffer.
    Könnte sein, das du mit WriteConsoleOutput auskommst und deine Offsreenpuffer mit
    CHAR_INFO *lpBuffer bauen kannst. Damit kannst du noch Text und Hintergrundfarbe definieren.
    Guck mal in der MSDN nach Console Functions, da findest du noch andere Funktionen.



  • Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten