25.1 Übersicht

Hollywood bietet Ihnen ein leistungsstarkes und dennoch einfaches Ebenensystem, das in der Lage sein sollte, alles, was Sie für Ihre Anwendung brauchen, zu realisieren. Die Ebenen sind Kinder eines Hintergrundbildes. Jedes Hintergrundbild hat seine eigenen angebrachten Ebenen. Hollywoods Ebenensystem wird beim Start nicht aktiviert. Sie müssen es durch den manuellen Aufruf vom Befehl EnableLayers() aktivieren. Alternativ können Sie den Tag Layers in @DISPLAY oder CreateDisplay() verwenden. Sobald Ebenen aktiviert sind, wird jedes Objekt auf einer eigenen Ebene auf dem Bildschirm angezeigt.

Beachten Sie, dass Ebenen aktiviert/deaktiviert auf einer pro-Display-Basis basieren. Somit ist es durchaus möglich, Displays mit und ohne Ebenen zu mischen. Wenn Sie zum Beispiel zwei Displays haben, könnte Display 1 Ebenen verwenden und Display 2 nicht. Das ist durchaus möglich.

Was Sie vermeiden sollten, ist Ebenen in einem Display zu deaktivieren, wenn sie vorher aktiviert wurden. Dies kann man zwar tun, aber es sollte in jedem Fall vermieden werden, da das arbeiten mit und ohne Ebenen deutlich unterschiedlich sind.

Lassen Sie uns jetzt ein einen Blick auf ein kurzes Beispiel werfen:

 
EnableLayers()
DisplayBGPic(2)
DisplayBrush(1, #CENTER, #CENTER)
Plot(100, 100, #RED)
Print("Hello World!")
Box(50, 50, 100, 100, #BLUE)

Der obige Code zeigt 4 verschiedene Objekttypen und legt zugleich vier Ebenen auf dem Hintergrundbild Nummer 2 an, da Ebenen aktiviert wurde. Jedes angezeigte Objekt erhält eine eigene Ebene und deshalb haben wir jetzt die folgenden Ebenen beim Hintergrundbild 2:

 
Ebene id 1: Pinsel 1 bei den Koordinaten #CENTER : #CENTER
Ebene id 2: Ein roter Pixel bei 100 : 100
Ebene id 3: Text "Hello World!"
Ebene id 4: Ein blaues Rechteck bei 50 : 50 mit der Größe 100 : 100

Jetzt können Sie alles tun, was man mit diesen Ebenen machen könnte, wie z.B. sie bewegen, Vordergrund Prioritäten tauschen, verstecken oder sie entfernen. Hollywood bietet viele Befehle, die Ebenen verarbeiten können.

Bitte beachten Sie, dass Ebenen-IDs dynamisch sind. Zum Beispiel wenn im oben genannten Code den Befehl

 
RemoveLayer(2)

aufrufen würde, dann würden die Ebenen-IDs geändert. Nach diesem Befehl haben wir die folgenden Ebenen für das Hintergrundbild 2:

 
Layer id 1: Pinsel 1 bei den Koordinaten #CENTER : #CENTER
Layer id 2: Text "Hello World!"
Layer id 3: Ein blaues Rechteck bei 50 : 50 mit der Größe 100 : 100

Sie sehen, dass der Text "Hello World!" jetzt die ID 2 hat und das Rechteck nun auf der Ebene 3 ist.

Ab Hollywood 2.0 gibt es einen neuen Befehl: SetLayerName(). Sie können ihn verwenden, um Ihren Ebenen einen eindeutigen Namen zu geben, so dass Sie die Ebene einfach durch ihren Namen ansprechen, statt über dessen ID-Adresse. Dies ist sehr nützlich, wenn Sie viele Ebenen haben und Sie sich nicht an ihre IDs erinnern möchten. Alle Befehle, die mit Ebenen arbeiten, akzeptieren nun zusätzlich zur numerischen ID auch einen Namen als Zeichenfolge. Hier ist wieder unser Beispiel:

 
Layer id 1: Pinsel 1 bei den Koordinaten #CENTER : #CENTER
Layer id 2: Ein roter Pixel bei 100 : 100
Layer id 3: Text "Hello World!"
Layer id 4: Ein blaues Rechteck bei 50 : 50 mit der Größe 100 : 100

Nun tun wir folgendes:

 
SetLayerName(1, "brush: 1")
SetLayerName(2, "red pixel")
SetLayerName(3, "text: hello world")
SetLayerName(4, "blue box")

Nun löschen wir die Ebene 2 mit dem Befehl

 
RemoveLayer("red pixel")

Wir müssen uns nicht um die Tatsache kümmern, dass die Ebenen IDs jetzt verändert wurden, da alle Ebenen Namen haben und so können wir sie leicht ansprechen.

Bitte beachten Sie, dass Ebenen vom Hintergrundbild immer privat sind. Zum Beispiel wenn Sie jetzt

 
DisplayBGPic(3)

aufrufen, können Sie auf keine Ebenen zugreifen. Wenn Sie jetzt nochmals

 
DisplayBGPic(2)

aufrufen, wird Hollywood Ihr Hintergrundbild 2 zusammen mit allen Ebenen anzuzeigen. So können Sie zwischen Hintergrundbilder wechseln und Sie müssen nicht wieder alle Ihre Daten anzuzeigen lassen. Wenn Sie Ebenen aktiviert haben, wird Hollywood alle Ebenen auf einem Hintergrundbild mit dem Befehl DisplayBGPic() automatisch anzuzeigen.

Um Speicherplatz zu sparen ist es jedoch ratsam, FreeLayers() aufzurufen, wenn Sie die Ebenen nicht mehr brauchen.

Bitte beachten Sie auch, dass Sie EnableLayers() aufrufen, bevor Sie auf die Objekte der Ebenen zugreifen können. Zum Beispiel wird der folgende Code nicht funktioniert:

 
DisplayBrush(1, #CENTER, #CENTER)
EnableLayers()
Undo(#BRUSH, 1)

Jeder Grafikbefehl überprüft, ob Ebenen aktiviert sind. Ist dies der Fall, wird eine Ebene hinzugefügt. Daher kann das obige Beispiel nicht funktionieren, da Ebenen nach DisplayBrush() aktiviert wurde. So müssen Sie den folgenden Code verwenden:

 
EnableLayers()
DisplayBrush(1, #CENTER, #CENTER)
Undo(#BRUSH, 1)

Dies funktioniert dann gut.

Wenn Sie Ebenen in Ihrer gesamten Anwendung verwenden, wird empfohlen, EnableLayers() gleich zu Beginn des Codes aufzurufen. Dadurch wird sichergestellt, dass Ebenen immer aktiviert sind.

Sobald eine Ebene auf dem Display ist, können Sie das Aussehen sehr leicht ändern. Hollywood bietet eine breite Palette von Befehlen für Ebenen an. Die stärkste von ihnen ist SetLayerStyle(), die verwendet werden kann, um fast alle Ebenenattribute mit nur einem einzigen Aufruf zu ändern. Es kann sogar die Attribute mehrerer Ebenen auf einmal ändern! Darüber hinaus können Sie eine Ebene mit RotateLayer() drehen und mit ScaleLayer() skalieren. Es ist auch möglich, Ebenen mit einem von Hollywoods Vielzahl von Übergangseffekten mit den Befehlen ShowLayerFX() und HideLayerFX() ein- und auszublenden.


Navigation zeigen