PCOPY

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » P » PCOPY

Syntax: PCOPY Quellseite, Zielseite
Typ: Anweisung
Kategorie: Gfx

PCOPY kopiert den Inhalt einer Bildschirmseite auf eine andere. 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 und erst seit FreeBASIC v18.2. 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