Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Double Buffering - erledigt

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 18.04.2010, 21:21    Titel: Double Buffering - erledigt Antworten mit Zitat

Ein Kumpel sprach bei mir an, dass ich Double Buffering in freebasic bewerkstelligen muss, wenn ich mein Problem umgehen möchte..

Was mache ich überhaupt?
Ich lese Daten aus einer Textdatei.
Ändern sich diese Daten, so soll er dann andere Grafiken laden.

Normalerweise lösche ich den Screen mit cls nach 100 ms, dann flackert es aber.

Wenn ich aber screenlock verwende und dann screenunlock, dann ruckelt es zwar nicht mehr, aber es kann passieren, dass der Screen einfriert.
Kein Fehlercode usw. kommt


durchgeknallt

Könnte mir jemand erklären, wie Double Buffering in freebasic abläuft?

Cu Andy


Zuletzt bearbeitet von Andy19312 am 19.04.2010, 19:32, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.04.2010, 21:24    Titel: Antworten mit Zitat

screen richtig einstellen und dann immer flip aufrufen, schau mal zu flip in die referenz, da dürftest du was finden
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 18.04.2010, 21:41    Titel: Antworten mit Zitat

Hab mir es gerade mal angeguckt...
Verstehen tue ich es aber überhaupt nicht.

Also was macht eigendlich das Programm "nochmal":

Es liest eine Textdatei.
Ändert sich der Inhalt der Textdatei sollte er andere Grafiken laden.

Zum Grafiken laden sollte gesagt werden, dass es mit bload geladen und mit put angezeigt wird.
Da die Grafik, die angezeigt werden soll, aber aus mehreren einzelnen Grafiken besteht, habe ich demzufolge mehrere bload, als auch put Befehle.

Gelöst hatte ich es mit cls am anfang der Schleife und mit sleep 100 am Ende der Schleife.

Da es dann flackerte benutzte ich, nachdem ich die Textdatei gelesen hatte screenlock und am ende der schleife screenunlock.
Hier hing sich aber das Programm auf, wenn ich mit sleep unter 100 ging.

Zudem hatte ich mehr Prozessorauslastung mit screenlock und screenunlock
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 18.04.2010, 21:57    Titel: Antworten mit Zitat

Was dein Programm machen soll, ist relativ egal. Für den FLIP-Befehl stellst du den Ausgabebildschirm und den Anzeigebildschirm unterschiedlich ein, d. h. das was du ausgibst, wird erstmal nicht angezeigt, sondern auf einen "unsichtbaren" Bildschirm geschrieben. Mit FLIP wechselt du die beiden Bildschirme - das, was du vorher geschrieben hast, wird sichtbar; wenn du wieder was schreibst, kommt das auf den vorher sichtbaren, jetzt unsichtbaren Schirm.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.04.2010, 22:09    Titel: Antworten mit Zitat

stells dir wie nen spiegel vor.. benutzer schaut auf bildschirm, spiegel sorgt dafür dass er ein bild sieht. wenn du was malst malst auf aber auf einem anderen bild, dass er nicht sieht. Benutzt du dann FLIP dreht sich der spiegel und er sieht das andere bild. und du malst dann auf dem bild was er vorher gesehen hat. so sieht er immer nur fertige bilder und nie halb gezeichnete wenns mal n moment länger dauert.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 18.04.2010, 22:19    Titel: Antworten mit Zitat

Ok,
screenres 400,400,32,2

2 = 2 Seiten

Wie aber stelle ich jetzt an, dass ich erstmal das was ich mache, nämlich die Grafiken laden und anzeigen auf die Seite 1 lege, obwohl ich Seite 2 anzeige.
Die Seite 2, hat dann schon geladen Grafiken usw.


Und ich dann beim nächsten Durchlauf die Seite 1 anzeige, wo ich den Screen grad mit Grafiken geladen habe?

Ich denke es müsste mit den beiden gehen.

SCREENSET [aktive_Seite][, sichtbare_Seite]
FLIP [Quellseite, Zielseite]

Nur wie, das ist mir ein Rätsel.

Achso.
Das hatte ein Kumpel von mir gesagt "C++ Programmierer":
Zitat:
unter SDL hast du ein buffer der so gross ist wie das angezeigte bild, aber nicht das bild selbst. eben der 2. buffer. da zeichnest alles rein. und dann kopierste den 2. buffer in den erste, also in das angezeigte bild und leerst den 2. buffer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 18.04.2010, 23:33    Titel: Antworten mit Zitat

Nun ja, ich würde halt mal das Beispiel zum Referenzeintrag ausprobieren.
Code:
SCREEN aufloesung,, 2
SCREENSET 1, 0
zeichne(alles, was, du, zeichnen, willst)
SCREENSYNC
FLIP ' oder SCREENCOPY

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andy19312



Anmeldungsdatum: 22.10.2005
Beiträge: 428

BeitragVerfasst am: 19.04.2010, 18:19    Titel: Antworten mit Zitat

@nemored es klappt...
Danke Dir und MisterD
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz