Bezeichnung
SelectBGPic -- wählt ein Hintergrundbild als Ausgabeziel (V1.5)
Übersicht
SelectBGPic(id[, mode, combomode])
Beschreibung
Dieser Befehl selektiert das durch id angegebene Hintergrundbild als aktuelles Ausgabeziel. Dieser Befehl kann in verschiedenen Modi verwendet werden. Der übliche Modus ist der Ebenenmodus (#SELMODE_LAYERS), der auch der Standardmodus ist. Ebenenmodus bedeutet, alle Grafikdatenausgaben von Hollywood werden als Ebenen diesem Hintergrundbild hinzugefügt werden. Daher müssen Sie Ebenen aktivieren, bevor Sie diesen Befehl im Ebenenmodus benutzen. Ihr Hintergrundbild wird nie im Ebenenmodus geändert werden, es erhält nur mehr und mehr Ebenen.

Alternativ können Sie auch die Modi #SELMODE_NORMAL oder #SELMODE_COMBO verwenden. Diese Modi werden Ihre Daten des BGPic ändern. Sie können nur auf BGPics verwendet werden, die derzeit nicht einem Display zugewiesen sind. #SELMODE_NORMAL bedeutet, dass nur die Farbkanäle des BGPic geändert werden, wenn Sie reinzeichnen. Der Transparenzkanal des BGPic (kann entweder eine Maske oder ein Alpha-Kanal sein) wird nie verändert werden. Sie können dies ändern, indem Sie #SELMODE_COMBO im optionalen Argument mode angeben. Wenn Sie diesen Modus verwenden, werden alle Befehle für Hollywoodgrafiken, die nach SelectBGPic() aufgerufen werden. die Farbe und den Transparenzkanal des BGPic ändern. Wenn das BGPic keinen Transparenzkanal hat, verhält sich #SELMODE_COMBO gleich wie #SELMODE_NORMAL.

Ab Hollywood 5.0 können Sie das optionale Argument combomode verwenden, um festzulegen, wie sich #SELMODE_COMBO verhalten soll. Ist combomode auf 0 gesetzt, werden die Farb- und Transparenzinformation aller Pixel in dem Quellenbild in jedem Fall zu dem Zielbild kopiert, selbst wenn die Pixel unsichtbar sind. Dies ist das Standardverhalten. Wenn combomode auf 1 gesetzt ist, werden nur die sichtbaren Pixel in das Zielbild kopiert. Dies bedeutet, wenn der Alphawert eines Pixels in dem Quellenbild 0 ist (unsichtbar), wird es nicht in das Zielbild kopiert werden.

Hollywood 6.0 stellt den neuen combomode 2 zur Verfügung. In diesem Fall wird Hollywood die Farbkanäle und den Alpha-Kanal des Quellbildes in die Farbe und Alpha der Zielbildkanäle mischen. Wenn Sie später das Zielbild zeichnen, wird es so aussehen, als ob die beiden Bilder hintereinander auf jeweils des anderen gezeichnet wurde. Bitte beachten Sie, dass das Argument combomode nur zusammen mit #SELMODE_COMBO unterstützt wird. Es hat keine Wirkung, wenn sie es mit den anderen Modi verwenden.

Beachten Sie, dass wenn Sie #SELMODE_NORMAL oder #SELMODE_COMBO verwenden, werden die ursprünglichen Grafiken des BGPic modifiziert. Sie werden immer auf die Originalgrafiken des BGPic zeichnen.

Stellen Sie sich vor, Sie haben 640x480 BGPic, welches Sie derzeit mit dem Befehl ChangeDisplaySize() auf 800x600 skaliert haben. Wenn Sie jetzt SelectBGPic() mit #SELMODE_NORMAL oder #SELMODE_COMBO auf dieses BGPic anwenden, werden Sie tatsächlich in das 640x480 Bild zeichnen. Das 800x600 Bild wird aktualisiert, wenn EndSelect() aufgerufen wird. Hollywood wird dann die Original-Grafik auf die aktuellen Ausgabegröße des BGPic skalieren, aber Ihre Zeichnungsbefehle werden immer auf dem originalen BGPic ausgeführt.

Ein alternativer Weg, um in die Transparenzkanäle eines BGPic zu zeichnen, ist, die Befehle SelectMask() oder SelectAlphaChannel() zu verwenden. Diese beiden Befehle werden jedoch die Schreibdaten nur auf den Transparenzkanal beschränken. Sie werden nicht den Farbkanal beeinflussen. Wenn Sie beide Kanäle (Farbe und Transparenz) ändern wollen, müssen Sie das Argument mode beim Befehl SelectBGPic() auf #SELMODE_COMBO setzen.

Wenn Sie mit dem Zeichnen in Ihr BGPic fertig sind und möchten, dass Ihr Display wieder das Ausgabeziel wird, rufen Sie einfach den Befehl EndSelect() auf.

Nur Befehle mit direkter Grafikausgabe können mit SelectBGPic() verwendet werden. Sie können nicht animierte Befehle wie MoveBrush() oder DisplayBrushFX() aufrufen, während SelectBGPic() aktiv ist.

Wenn mode auf #SELMODE_LAYERS gesetzt ist, kann SelectBGPic() auch nützlich sein. So können Sie mehrere Änderungen an den Ebenen des aktuellen BGPic erledigen, ohne dass nach jeder Änderung das BGPic aktualisiert wird. Zum Beispiel können Sie auf einmal 100 neue Ebenen einfügen. Das wäre ziemlich langsam, wenn man es in der herkömmlichen Art und Weise tun würde, weil Hollywood das Display hundertmal aktualisiert. Um dies zu vermeiden, können Sie einfach SelectBGPic() aufrufen, die 100 Ebenen einfügen und Hollywood wird das Display nicht aktualisieren, bevor Sie EndSelect() aufgerufen haben. Innerhalb eines SelectBGPic()-EndSelect() Block können Sie so viele Änderungen vornehmen, wie Sie möchten. Sie werden nicht vor dem Befehl EndSelect() gezeichnet werden. Siehe unten für ein Beispiel.

Siehe auch EndSelect(), SelectAlphaChannel(), SelectBrush(), SelectMask(), SelectLayer() und SelectAnim().

Eingaben
id
Hintergrundbild, welches als Ziel benutzt werden soll
mode
optional: Modus mit #SELMODE_LAYERS, #SELMODE_NORMAL oder #SELMODE_COMBO als Parameter (siehe oben); Voreingestellt ist #SELMODE_LAYERS (V4.5)
combomode
optional: Modus, wenn #SELMODE_COMBO aktiv ist (siehe oben); voreingestellt ist 0 (V5.0)
Beispiel
EnableLayers()
SelectBGPic(2)
TextOut(#CENTER, #CENTER, "Hello World")
Box(0, 0, 100, 100, #RED)
Box(#RIGHT, #BOTTOM, 100, 100, #BLUE)
EndSelect()
DisplayBGPic(2)
Der obige Code wählt das Hintergrundbild 2 als aktuelles Ziel und fügt drei Ebenen (eine Text und zwei Rechteck) ein. Danach wird das Display als Ausgabeziel ausgewählt und Hintergrundbild 2 mit drei Ebenen dargestellt.


SetFillStyle(#FILLCOLOR)
EnableLayers
SelectBGPic(1)  ; wir gehen davon aus, 1 ist unser aktuelles BGPic
; erstellt 100 Ebenen
For Local k = 1 To 100
   Box(Rnd(540), Rnd(380), 100, 100, RGB(Rnd(255), Rnd(255), Rnd(255)))
Next
EndSelect       ; nun werden die 100 Ebenen aufs Mal dargestellt!
Dieser Code stellt den oben diskutierten Fall dar. Sie müssen viele Änderungen vornehmen und Sie möchten aus Performancegründen das Zeichnen auf später verschieben. In unserem Fall wollen wir 100 Ebenen dem aktuellen BGPic hinzuzufügen. So kapseln wir diesen Code durch einen SelectBGPic()-EndSelect Block. Hollywood wird die 100 Ebenen hinzufügen und wird sie in einem Rutsch zeichnen, wenn EndSelect() aufgerufen wird. Das ist viel schneller, als ohne SelectBGPic(), weil in diesem Fall jeder Aufruf von Box() eine Aktualisierung verursachen würde.

Navigation zeigen