|
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 |
Dj_Damy Gast
|
Verfasst am: 18.10.2004, 12:57 Titel: double buffering für screen 13 |
|
|
kann mir jemand sagen wie ich in screen 13 double buffering benutzen kann?
gruß dj_damy |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 18.10.2004, 15:36 Titel: Schwierig |
|
|
Hi !
Hmm...ohne Lib (z.B. DQB) ist das schwierig, aber bestimmt machbar.
Also wenn du nur nicht willst, dass deine Sprites flackern, dann setze ein WAIT &H3DA, 8 hinter den Befehl zu Sprite darstellen (z.B. PUT)
Wenn du tatsächlich mehrere Bildschirmseiten haben willst, dann kannst du auch den SCREEN 7 benutzen, der hat 7 Bildschirmseiten. Allerdings auch nur 16 Farben. Falls du dir ein Spiel oder so programmieren willst, rate ich dringenst zu DQB ! Da haste alles was du brauchst. _________________
|
|
Nach oben |
|
|
Thomas Antoni
Anmeldungsdatum: 12.10.2004 Beiträge: 220 Wohnort: Erlangen
|
Verfasst am: 18.10.2004, 16:59 Titel: Dazu habe ich mir für die QB-MonsterFAQ vorgemerkt... |
|
|
--------------------------------------------------------------------------------
Frage:
--------
Wie realisiere ich 2 Bildschirmseiten in SCREEN 13?
Antwort:
--------
[ von Lebostein ( Lebostein@gmx.de ) im QB-Forum, 14.6.2003 ]
' QuickBasic mit "/L" starten wegen CALL ABSOLUTE!
SUB PageCopy (ax%, bx%, cx%, dx%)
DEF SEG = VARSEG(code$)
offset% = SADD(code$)
CALL ABSOLUTE(BYVAL ax%, BYVAL bx%, BYVAL cx%, BYVAL dx%, offset%)
END SUB
'
'Der kleine Assemblercode zum Kopieren von 64000 Bytes
DIM SHARED code$
RESTORE CopyData:
FOR i% = 1 TO 30
READ a$
code$ = code$ + CHR$(VAL("&H" + a$))
NEXT i%
CopyData:
DATA 1E,55,89,E5,8B,46,0E,8E,D8,8B,76,0C,8B,46,0A
DATA 8E,C0,8B,7E,08,B9,00,7D,F3,A5,5D,1F,CA,08,00
'
REDIM buffer1(31999) AS INTEGER 'Bildschirmseite 1
REDIM buffer2(31999) AS INTEGER 'Bildschirmseite 2
'
SCREEN 13
'
'Linie malen
LINE (0, 0)-(319, 199), 5
'
'den Bildschirm in den Buffer 1 kopieren:
PageCopy &HA000, 0, VARSEG(buffer1(0)), VARPTR(buffer1(0))
'
'Bildschirm löschen
CLS
'
'Von Buffer zu Buffer:
PageCopy VARSEG(buffer1(0)), VARPTR(buffer1(0)), VARSEG(buffer2(0)), VARPTR(buffer2(0))
'
'vom Buffer 1 in den Bildschirm kopieren:
PageCopy VARSEG(buffer2(0)), VARPTR(buffer2(0)), &HA000, 0
'
'Linie ist wieder da!!!!!!
--------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
Frage
---------
Wie verwende ich mehrere Bildschirmseiten in SCREEN 13?
Antwort 1
---------
[ von Mario Zechner ("Marzec"; mariozechner@hotmail.com ) im QB-Forum, 22.4.2003 ]
Die Verwendung von zwei Bildschirmseiten, das so genannte Doublebuffering, ist im
SCREEN 13 prinzipiell kein Problem. Nur es funktioniert nicht so wie
beispielsweise im Screen 7, sondern Du mußt selbst einen Backbuffer
bereitstellen (Frage nicht warum; es würde zu lange dauern, das zu erklären) :
DIM buffer(31999) as INTEGER
... so und jetzt brauchst nur noch eine routine die den Inhalt in den VIdeoRam kopiert:
for Offset& = 0 to 63999
DEF SEG = VARSEG(buffer(0)
color = PEEK(Offset&)
DEF SEG = &HA000
POKE Offset&, color
next Offset&
zwei Probleme sind noch zu lösen:
+ vielleicht zu langsam?(uahhhhh)
+ hast Du Zeichen-Routinen die in den array buffer(0) zeichnen können?
normalerweise verwendet man für solche dinge bibliotheken (ugl, dqb, flib).
Oder Du beherscht assembler und implementierst die BufferCopy- sowie die
Zeichenroutinen (Line etc.) selbst.
Answer 2
---------
Es gibt im ABC-Archiv DUBBUF.BAS
--------------------------------------------------------------------------------
_________________ +++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++ |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 18.10.2004, 19:03 Titel: stimmt ja garnicht |
|
|
Ich hab noch nie in meinem ganzen Programmier-Leben den SCREEN 7 benutzt
Ich weiß nur, dass der mehrere Bildschirmseiten hat.
Außerdem hatte ich eben voll die gute Idee :
Mit RAMDRIVE erstellt man sich 2 Laufwerke mit je 125 Sektoren (125*512 = 64000). Und dann speichert man einfach mit BSAVE den Videospeicher aufs neu erstellte Laufwerk. Da das Laufwerk nicht Physisch ist, dauert das Lesen und Schreiben nicht länger als beim normalen RAM-Zugriff.
Und dann kann man mit BLOAD einfach den Kram in den Videospeicher zurückschreiben lassen.
Und die Methode verschwendet keinen Speicher, der QB zugesichert ist.
GENIAL, ODER
Allerdings weiß ich nicht, ob diese Methode auch unter XP funzt.. _________________
|
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 18.10.2004, 20:35 Titel: |
|
|
Ich arbeite noch öfters mit SCREEN 7 bei solchen Projekten, wo Animation im Spiel ist. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 18.10.2004, 20:51 Titel: Re: Page Flipping |
|
|
Hallo !
Sebastian hat Folgendes geschrieben: | Hallo.
Warum wollen eigentlich immer alle Screen 7 benutzen, wenn sie mit PCOPY arbeiten wollen?
Screen 9 bietet eine höhere Auflösung und bietet auch mehrere Bildschirmseiten. :fragezeichen:
Viele Grüße!
Sebastian |
Also ich mag SCREEN 9 nicht, wegen des seltsamen Verhältnisses von der x- zur y-Achse. Bei SCREEN 7 oder 8 kann man die Verzerrung (1,2 bzw. 2,4 zu 1) noch im Kopf berechnen und mit 6:5 bzw. 12:5 ein quadratisches Raster erzeugen.
Gruss
Skilltronic |
|
Nach oben |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 18.10.2004, 21:01 Titel: Stimmt |
|
|
Da kann ich nur zustimmen
Versuch mal CIRCLE(10, 10), 10, 10 _________________
|
|
Nach oben |
|
|
Dj_Damy
Anmeldungsdatum: 18.10.2004 Beiträge: 30 Wohnort: Mainz
|
Verfasst am: 19.10.2004, 11:42 Titel: schade... |
|
|
dann werd ich wohl mit ner lib weiterarbeiten müssen
danke für eure antworten
greez Dj_Damy |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 24.10.2004, 14:27 Titel: Re: Stimmt |
|
|
ICC hat Folgendes geschrieben: | Da kann ich nur zustimmen
Versuch mal CIRCLE(10, 10), 10, 10 |
Wie meinst du das ? CIRCLE passt sich ja schon automatisch an den Bildschirm an und der Kreis wird rund. Das einzige Problem ist, dass der y-Radius durch eben diese Anpassung nicht mehr 10 Pixel beträgt. Das hast du aber auch bei allen anderen Bildschirmmodi ausser 12. |
|
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.
|
|