Referenz - PCOPY
Syntax: PCOPY Quellseite, Zielseite
Typ: Anweisung
Kategorie: Grafik
PCOPY kopiert den Inhalt einer Bildschirmseite auf eine andere.
- 'Quellseite' ist die Nummer einer Bildschirmseite, die in einem vorhergehenden SCREENRES-Befehl erstellt wurde. Wird dieser Parameter ausgelassen, nimmt FreeBASIC automatisch die Nummer der aktiven Bildschirmseite an.
- 'Zielseite' ist ebenfalls die Nummer einer Bildschirmseite. Wird dieser Parameter ausgelassen, nimmt FreeBASIC automatisch die Nummer der sichtbaren Bildschirmseite an.
Der Befehl wird benutzt, um weiche Animationen zu erzeugen, indem auf eine unsichtbare Arbeitsseite gezeichnet wird, deren Inhalt per PCOPY auf die aktive Seite übertragen wird. Diese Technik ist auch als 'double buffering' oder 'page flipping' bekannt.
Die 'Zielseite' wird mit dem Inhalt der 'Quellseite' überschrieben, wenn PCOPY aufgerufen wird.
Beispiel 1:
ScreenRes 320, 240, 32, 2
Dim As Integer x = 50, max_x = 270
ScreenSet 0, 1 ' aktive Seite auf 0 und die sichtbare Seite auf 1 setzen
Do While x < max_x
' aktive Seite löschen und Kreis zeichnen
Cls
Sleep 25 ' Diese Pause würde ohne double buffering starkes Flackern hervorrufen
Circle (x, 50), 50
x += 1 ' Kreis im nächsten Durchgang um 1 nach rechts verschieben
ScreenSync ' auf Bildschirm-Aktualisierung warten
PCopy ' Kreis von der aktiven Seite auf die sichtbare Seite kopieren
Loop
Sleep
Im Grafikmodus macht PCOPY dasselbe wie FLIP und SCREENCOPY, PCOPY ist aber der einzige Befehl, der auch im Konsolen-Modus funktioniert.
Beispiel 2: PCOPY im Konsolen-Modus (SCREEN 0)
Dieses Beispiel funktioniert nur unter Windows und DOS. Unter Linux ist der Einsatz von PCOPY im Konsolenmodus nicht möglich.
' aktive Seite auf 0 und die sichtbare Seite auf 1 setzen
#if __FB_LANG__ = "QB"
Screen ,, 0, 1
#else
Screen , 0, 1
#endif
Dim As Integer i, frames, fps
Dim As Double t
t = Timer
Do
' aktive Seite beschreiben
Cls
Locate 1, 1
Color (i And 15), 0
Print STRING$(80 * 25, Hex$(i, 1));
i += 1
' Frames pro Sekunde ausgeben
Color 15, 0
Locate 1, 1
Print "fps: " & fps,
If Int(t) <> Int(Timer) Then
t = Timer
fps = frames
frames = 0
End If
frames += 1
' aktive Seite auf die sichtbare Seite kopieren
PCopy
' 50ms pro Frame warten, um CPU-Zeit freizugeben
Sleep 50, 1
Loop Until Len(Inkey$)
Plattformbedingte Unterschiede:
PCOPY kann im SCREEN-Modus 0 nur unter Windows und DOS eingesetzt werden.
Unterschiede zu früheren Versionen von FreeBASIC:
Die Möglichkeit, PCOPY im SCREEN-Modus 0 einzusetzen (unter Windows und DOS), besteht seit FreeBASIC v18.2
Siehe auch:
FLIP, SCREENCOPY, SCREENRES, Grafik
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|