OpenWindowedScreen()
Syntax
Ergebnis = OpenWindowedScreen(WindowID, x, y, Breite, Höhe [, AutoStretch, RightOffset, BottomOffset [, FlipModus]])Beschreibung
Öffnet einen neuen Bildschirm entsprechend den angegebenen Parametern auf dem angegebenen Fenster, welches zuvor mittels OpenWindow() geöffnet werden muss. Vor der Verwendung dieses Befehls muss InitSprite() erfolgreich aufgerufen worden sein.
Der "Windowed Screen" (Bildschirm im Fenster) ist in der Lage, die Hardware-Beschleunigung in der gleichen Art und Weise wie der für Vollbildschirme gedachte Befehl OpenScreen() zu verwenden. Sobald ein solches Fenster geöffnet wurde, müssen die Fenster-Ereignisse mittels WindowEvent() verarbeitet werden, um ein korrektes Verhalten zu haben. Alle Ereignisse müssen verarbeitet werden, bevor die Puffer getauscht werden (siehe die Beispiele unten).
Parameter
WindowID Das für das Erstellen des Bildschirm zu verwendende Fenster. WindowID() kann verwendet werden, um eine gültige WindowID zu erhalten. x, y Die Position des Bildschirms im angegebenen Fenster, in Pixel. Breite, Höhe Die Bildschirmauflösung, in Pixel. AutoStretch (optional) Ist dieser auf #True gesetzt, dann wird die Größe des Bildschirmbereichs automatisch angepasst (und der Inhalt auf die neue Bildschirm-Größe gezoomt), wenn sich die Fenstergröße ändert. RightOffset, BottomOffset (optional) Definieren den rechten und unteren Rand des Fensters, in Pixel (für eine Statusleiste zum Beispiel). FlipModus (optional) Legt die beim Vertauschen ("Flippen") der Puffer verwendeten Methoden zur Synchronisation des Bildschirms fest (auch bekannt als 'Vertikal-Blank-Synchronisation'). Dieser kann einen der folgenden Werte annehmen: #PB_Screen_NoSynchronization : Synchronisation ausschalten #PB_Screen_WaitSynchronization : Synchronisation einschalten (Standard-Wert) #PB_Screen_SmartSynchronization : Synchronisation einschalten, mit einer CPU-schonenderen Routine, wenn das Programm nicht die gesamte CPU-Rechenzeit benötigt (nur bei Vollbildschirm)Das Warten auf die Bildschirm-Synchronisation ermöglicht einen perfekten Puffer-"Tausch" (Flip ohne "Ausreißer" oder andere sichtbare Artefakte), da der Flip erst nach dem vollständigen Zeichnen des Bildschirms (und wenn sich der "Screen-Spot" außerhalb des sichtbaren Bildschirmbereichs befindet) ausgeführt wird. Dies verknüpft auch die Flip-Frequenz (Häufigkeit des Puffer-Tauschs) mit dem aktuellen Bildschirm-Refresh ("Auffrischung"), z.B. bei einem 60 Hz Bildschirm sind maximal 60 Flips pro Sekunde möglich.
Der geöffnete Bildschirm wird mit 2 Videopuffern erstellt, um das speziell für Spiele entwickelte "Double-Buffering" (Doppelpufferung) zu ermöglichen. Die Puffer können mittels dem FlipBuffers() Befehl manipuliert werden.
Rückgabewert
Ein Wert ungleich Null, wenn der Bildschirm erfolgreich geöffnet wurde, andernfalls Null.
Anmerkungen
Nur ein "Windowed Screen" (also Bildschirm im/auf dem Fenster) kann zur gleichen Zeit geöffnet sein. Die Bildschirm-Dimensionen können nicht größer als das Fenster sein, andernfalls können Artefakte auftreten.
Beispiel: Feste Bildschirmgröße mit Gadgets
If InitSprite() = 0 MessageRequester("Error", "Can't open screen & sprite environment!", 0) End EndIf If OpenWindow(0, 0, 0, 220, 160, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ButtonGadget(0, 170, 135, 45, 20, "Quit") If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160) CreateSprite(0, 20, 20) If StartDrawing(SpriteOutput(0)) Box(0, 0, 20, 20, RGB(255, 0, 155)) Box(5, 5, 10, 10, RGB(155, 0, 255)) StopDrawing() EndIf Else MessageRequester("Error", "Can't open windowed screen!", 0) End EndIf EndIf direction = 2 Repeat ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten ; Repeat Event = WindowEvent() Select Event Case #PB_Event_Gadget If EventGadget() = 0 End EndIf Case #PB_Event_CloseWindow End EndSelect Until Event = 0 FlipBuffers() ClearScreen(RGB(0, 0, 0)) DisplaySprite(0, x, x) x + direction If x > 140 : direction = -2 : EndIf If x < 0 : direction = 2 : EndIf Delay(1) ForEver
Beispiel: Bildschirm mit aktiviertem Auto-Stretch und Bottom-Offset
If InitSprite() = 0 MessageRequester("Error", "Can't open screen & sprite environment!", 0) End EndIf If OpenWindow(0, 0, 0, 420, 200, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered) CreateStatusBar(0, WindowID(0)) AddStatusBarField(420) StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...") If OpenWindowedScreen(WindowID(0), 0, 0, 420, 200, #True, 0, 20) CreateSprite(0, 50, 50) ; Erstellt ein leeres Sprites, dies wird komplett schwarz sein Repeat ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten ; Repeat Event = WaitWindowEvent(10) If Event = #PB_Event_CloseWindow End EndIf Until Event = 0 FlipBuffers() ClearScreen(RGB(0, 0, 200)) ; Ein blauer Hintergrund DisplaySprite(0, 10, 10) ; Darstellung unserer schwarzen Box in der linken oberen Ecke DisplaySprite(0, 260, 10) ; Darstellung unserer schwarzen Box in der rechten oberen Ecke ForEver Else MessageRequester("Error", "Can't open windowed screen!", 0) EndIf EndIf
Für ein detaillierteres Beispiel schauen Sie in
Beispiel
WindowedScreen.pb
Siehe auch
OpenScreen()
Unterstützte OS
Alle