Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - PCOPY

Referenz-Navigation

 

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

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 BefehlsreferenzeintragFLIP und BefehlsreferenzeintragSCREENCOPY, PCOPY ist aber der einzige Befehl, der auch im Konsolen-Modus funktioniert.

Beispiel 2: PCOPY im Konsolen-Modus (BefehlsreferenzeintragSCREEN 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:
BefehlsreferenzeintragFLIP, BefehlsreferenzeintragSCREENCOPY, BefehlsreferenzeintragSCREENRES, BefehlsreferenzeintragGrafik


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 07.08.2007 von RedakteurMao angelegt.
  • Die aktuellste Version wurde am 29.08.2012 von Redakteurnemored gespeichert.
  Versionen Versionen