 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 18.04.2010, 21:21 Titel: Double Buffering - erledigt |
|
|
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
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2010, 21:24 Titel: |
|
|
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 |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 18.04.2010, 21:41 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 18.04.2010, 21:57 Titel: |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.04.2010, 22:09 Titel: |
|
|
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 |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 18.04.2010, 22:19 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 18.04.2010, 23:33 Titel: |
|
|
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 |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 19.04.2010, 18:19 Titel: |
|
|
@nemored es klappt...
Danke Dir und MisterD |
|
Nach oben |
|
 |
|
|
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.
|
|