![]() |
|
|||||
Das Malfenster bietet zahlreiche spezialisierte, für Director optimierte Funktionen. Vom Komfort eines vollständigen Bildbearbeitungsprogramms wie Photoshop ist es natürlich dennoch sehr weit entfernt. Sie sollten die diversen – in der Regel intuitiv verständlichen – Funktionen einfach ausprobieren. In der Werkzeugleiste am linken Rand des Fensters befinden sich die zahlreichen Mal- und Auswahlwerkzeuge, während sich oberhalb der Zeichenfläche verschiedene Transformationswerkzeuge zum Drehen, Spiegeln, Verzerren oder für Farbänderungen der jeweiligen Auswahl befinden. Der Registrierpunkt Eine wichtige Funktion wird hier dennoch näher erläutert, zumal sie nicht nur Bitmap-Darsteller betrifft: Mit dem linken Werkzeug in der zweiten Reihe der Malfenster-Werkzeugpalette können Sie den Registrierpunkt des aktuellen Bitmap-Darstellers einstellen. Bei Auswahl dieses Werkzeugs sehen Sie im eigentlichen Malbereich ein Fadenkreuz aus zwei dünnen Linien, das sich durch Klick versetzen lässt. Der eingestellte Punkt dient der Positionsangabe für Sprites dieses Darstellers auf der Bühne, vor allen Dingen aber auch als Angelpunkt für Drehungen des Sprites. Wenn Sie auf dieses Werkzeug doppelklicken, wird der Registrierpunkt übrigens wieder auf die physikalische Mitte des Darstellers gesetzt. Interessant ist auch der Dialog Modifizieren • Bitmap transformieren, den Sie aufrufen können, wenn in der Besetzung ein Bitmap-Darsteller ausgewählt ist. Hier können Sie die Größe und die Farbtiefe von Bitmap-Darstellern verändern. Oben kann die Darstellergröße (in Pixeln) geändert werden. Sie können entweder einen Pixelwert für die Breite oder Höhe (und bei Bedarf per Auswahl die Proportionen erhalten) oder einen Skalierungs-Prozentsatz eingeben. Darunter können Sie die Farbtiefe ändern. Die ursprüngliche Farbtiefe neu erstellter Darsteller richtet sich nach der aktuellen Filmfarbtiefe, also der Farbtiefe des Betriebssystems. Diese können Sie unter Windows ändern, indem Sie mit der rechten Maustaste auf dem Desktop ins Leere klicken, Eigenschaften auswählen und auf der letzten Registerkarte (Einstellungen) im erscheinenden Dialog eine andere Farbtiefe auswählen. Unter Mac OS X befindet sich die Einstellung unter Systemeinstellungen • Monitore, bei Mac OS 9 dagegen unter Apfelmenü • Kontrollfelder • Monitore. Das Erhöhen der Farbtiefe macht eigentlich nie Schwierigkeiten. Beim Vermindern ist dagegen der Unterschied zwischen Farben zuordnen (die nächstgelegene Palettenfarbe wird verwendet) oder Rastern (nicht vorhandene Farben werden durch Streuung benachbarter Farben simuliert) zu beachten. Im Allgemeinen sollten Sie Fotos besser rastern, bei flächigen Zeichnungen mit wenigen Farben dagegen besser Farben zuordnen. In früheren Director-Versionen (bis 6.5) konnten Farben immer nur durch Palettenzuordnung zugewiesen werden, sodass es üblich war, nur mit 8 Bit Farbtiefe zu arbeiten. Seit Version 7.0 können Farben alternativ als RGB-Werte eingestellt werden, sodass es sich seit dieser Version lohnen kann, mit höheren Filmfarbtiefen zu arbeiten, zumal diese heute von fast allen Computersystemen unterstützt werden. Tabelle 10.1 zeigt die Vor- und Nachteile der Filmfarbtiefen 8 Bit und einer höheren Farbtiefe.
1-Bit-Bitmaps Auf ihre Weise interessant sind im übrigen 1-Bit-Bitmaps. Sie werden ebenfalls über den Dialog Bitmap transformieren erstellt. Ein Darsteller mit dieser Farbtiefe besteht nur aus zwei verschiedenen Farben: Schwarz und Weiß. Wichtig ist, mit welchen Optionen ein Darsteller in diese Farbtiefe konvertiert wurde. Bei der Einstellung Farben zuordnen entscheidet eine einfache Schwellenwert-Operation darüber, ob ein bestimmter Pixel schwarz oder weiß wird: Pixel, deren rechnerische Helligkeit unter 50% Grau liegt, werden schwarz, alle anderen werden weiß – dies ähnelt der in Kapitel 8, Bildbearbeitung und Grafik, erläuterten Schwellenwert-Funktion in Photoshop, dort kann jedoch wenigstens dieser Wert angepasst werden. Deshalb ist es besser, das Bild vorher in Photoshop entsprechend zu behandeln und dann zu importieren. Der Import von Darstellern wird weiter unten genau beschrieben. Wählen Sie dagegen Rastern aus, so verhält sich Director ähnlich wie ein SchwarzWeiß-Laserdrucker, der ein Farbbild druckt. Die rechnerische Helligkeit jeder einzelnen Farbe wird ermittelt, und es werden, je heller diese Farbe ist, immer weniger schwarze Pixel gestreut – es entsteht so ein grob gerastertes Graustufenbild. Abbildung 10.11 zeigt die Ergebnisse im direkten Vergleich. Kein Problem gibt es natürlich bei solchen Bildern, die von vornherein nur in schwarz-weiß angelegt wurden; genau diese sind auch die eigentlich wichtigen Kandidaten für die Konvertierung in 1 Bit. Das Nützliche an diesen Darstellern ist nämlich, dass man die von ihnen abgeleiteten Sprites einfärben kann. So können Sie unter Ersparnis von sehr viel Speicherplatz zum Beispiel eine ganze Menge von Sprites eines solchen Darstellers verwenden und unterschiedlich färben – besonders für Shockwave-Produktionen ist dies eine hervorragende Option. Sie können einem 1-Bit-Bitmap-Sprite die Vorder- und Hintergrundfarbe zuweisen, indem Sie sie in der Sprite-Palette des Eigenschafteninspektors oder in der allgemeinen Werkzeugpalette (siehe unten) einstellen, während das Sprite ausgewählt ist. Übrigens wird die Farbe über die Frames des Sprites hinweg »getweent« (wenn dies in den oben beschriebenen Tweening-Eigenschaften angekreuzt ist). Dazu müssen Sie nur die einzelnen Keyframes des Sprites markieren und erhalten einen recht interessanten Effekt. Im Übrigen ist hier der Farbeffekt Matt sehr interessant: Da die Hintergrundfarbe, die innerhalb geschlossener Formen erhalten bleibt, nicht weiß sein muss, sondern eingestellt werden kann, können Sie auf diese Weise zweifarbige Sprites erstellen. Die WerkzeugpaletteEine Reihe von Darstellertypen wird über die Werkzeugpalette (Fenster • Werkzeuge oder (STRG) + (7)) erstellt. Die Besonderheit: Diese Darsteller werden direkt auf die Bühne gezeichnet – es erscheint sofort ein Darsteller in der Besetzung und ein Sprite dieses neuen Darstellers im Drehbuch. Nicht alle Schaltflächen der Werkzeugpalette dienen dem Erstellen neuer Darsteller. Im Einzelnen verfügt sie über die folgenden Funktionen:
Beachten Sie, dass sämtliche Formdarsteller, also Rechteck, Oval und so weiter über die Registerkarte Form im Eigenschafteninspektor nachträglich ineinander konvertiert werden können. Das Ankreuzfeld Gefüllt regelt (außer bei Linien) zusätzlich, ob die gefüllte oder die nicht gefüllte Variante verwendet werden soll. Text- und FelddarstellerDie beiden grundsätzlichen Darstellertypen für Text auf der Bühne unterscheiden sich leicht voneinander: Textdarsteller besitzen feiner einstellbare typografische Optionen und sind deshalb eher für statischen beziehungsweise per Lingo-Skript gesetzten Text geeignet. Felddarsteller eignen sich dagegen eher für die Texteingabe. Für jeden dieser beiden Darstellertypen gibt es eine eigene, spezielle Registerkarte im Eigenschafteninspektor. Textdarsteller-Optionen Bei Textdarstellern können Sie die folgenden wichtigen Einstellungen vornehmen:
Eine weitere interessante Besonderheit bei Textdarstellern ist es, dass die verwendeten Schriftarten sowohl bei selbstlaufenden Programmen (Projektoren) als auch bei Shockwave-Exports mit in den fertigen Film verpackt werden. Felddarsteller Bei Felddarstellern sollten Sie dagegen nur Basisschriften des Betriebssystems verwenden, das heißt Arial, Times New Roman oder Courier New unter Windows beziehungsweise Helvetica, Times oder Courier auf dem Mac. Die Schriften werden auf keinen Fall mit in den Film gepackt. Bei exotischeren Schriften ist es fraglich, ob sie auf dem jeweiligen Zielrechner installiert sind. Im Übrigen sind auch Unterschneidung und Anti-Alias nicht möglich. Aus diesen Gründen verbrauchen Felddarsteller weniger Speicher und sind so besonders gut für Shockwave-Produktionen sowie, wie gesagt, für die Texteingabe geeignet. Sie können für Felddarsteller die folgenden zusätzlichen Einstellungen auf der Registerkarte Feld im Eigenschafteninspektor vornehmen:
Vektorform-DarstellerBereits in Kapitel 8, Bildbearbeitung und Grafik, wurde die Überlegenheit der Vektorgrafik gegenüber Bitmaps für einfache Zeichnungen angesprochen: Sie benötigt weniger Speicherplatz und ist ohne Qualitätsverlust frei skalierbar. Gegenüber den ebenfalls vektororientierten Formdarstellern haben exakte Vektordarsteller drei weitere wichtige Vorteile: Sie können eine beliebige Form annehmen, haben einen beliebig wählbaren Registrierpunkt und können mit einem Farbverlauf gefüllt werden. Um einen Vektordarsteller zu erstellen, benötigen Sie das Vektorform-Fenster: Fenster • Vektorform oder (STRG) + (Shift) + (V). Hier finden Sie eine Werkzeugleiste mit den folgenden wichtigen Funktionen:
Alle weiteren Funktionen sind im Grunde intuitiv verständlich oder wurden bereits im Zusammenhang mit anderen Optionen des Programms erläutert. Ganz unten wird die Füllungsart der Vektorform ausgewählt. Von links nach rechts gibt es folgende Einstellungen: »Keine Füllung« (nur Konturlinie), »einfarbige Füllung« und »Farbverlauf«. Darüber werden die einzelnen Farben als solche eingestellt. Anders als bei Bitmap-Darstellern muss die Hintergrundfarbe einer Vektorform nicht weiß sein, sondern kann hier ausgewählt werden. Dennoch wird die Hintergrundfarbe auch bei Sprites dieses Darstellertyps ausgeblendet, wenn der Sprite-Farbeffekt Hintergrund transparent ausgewählt wird. Importierte DarstellerBisher wurden lediglich Darsteller behandelt, die innerhalb von Director erstellt wurden. Gerade Bitmap-Darsteller, aber auch Audio, Video und Texte, werden dagegen häufig importiert. Dafür müssen Sie zunächst die Importfunktion aufrufen: Wählen Sie Datei • Importieren oder drücken Sie (STRG) + (R). Der erscheinende Dialog besitzt die folgenden wichtigen Optionen:
Importierte Bitmaps Die wahrscheinlich häufigste Sorte von importierten Dateien sind Bitmap-Dateien. Director unterstützt alle gängigen Typen von Bitmap-Bildern. Wenn Sie ein Bitmap zum Import ausgewählt haben, erscheint ein weiterer Dialog, in dem Sie die Farbtiefe bestimmen können, mit der es importiert werden soll: Die Auswahl Grafik behält die Original-Farbtiefe der importierten Datei bei, während Bühne den Darsteller in die Farbtiefe des Films, also in die aktuelle Farbtiefe des Betriebssystems, umwandelt. Die Optionen zur Auswahl der Farbpalette sind nur aktiv, wenn es sich um eine 8-Bit-Datei (oder noch weniger) handelt oder wenn sie bei 8 Bit Systemfarbtiefe mit der Einstellung Bühne importiert werden soll: Importieren sorgt dafür, dass die Farbpalette der Datei als separater Darsteller importiert wird (so genannter Paletten-Darsteller), während Anpassen das Bild an eine der vorhandenen (in Director integrierten) Paletten anpasst, die Sie im Popup-Menü auswählen können. Rastern ist dann wichtig, wenn Sie die Dateien mit der Einstellung Bühne importieren, und die Filmfarbtiefe geringer ist als die des importierten Bitmaps. Farben, die im Film (beziehungsweise in der ausgewählten Palette) nicht vorhanden sind, werden durch Streuung benachbarter Farben simuliert. Die Option Einstellungen für restliche Grafiken erhalten ist praktisch für den Import mehrerer Bilddateien. Director übernimmt die gewählten Einstellungen für den gesamten Importvorgang und fragt nicht noch einmal nach. Wenn Sie eine TIFF-Datei mit einem zusätzlichen Alphakanal importieren und eine Farbtiefe von 32 Bit für das Bild beibehalten, wird der Alphakanal als variabel über das Bild verteilte Abstufung der Deckkraft verwendet. Für den Import von Photoshop-Dateien steht übrigens eine interessante Erweiterung zur Verfügung: Das Xtra (Director-Plug-in) Photocaster importiert die einzelnen Ebenen eines Photoshop-Bildes automatisch als Darsteller. Er ist sogar in der Lage, die Registrierpunkte so zu setzen, dass die relative Positionierung erhalten bleibt. Näheres über dieses interessante Produkt erfahren Sie beim Hersteller unter www.medialab.com. Sound importieren Auch Audiodateien werden recht häufig in Director importiert und verwendet. Vieles, was die Verwendung von Sound betrifft, wird durch Lingo-Anweisungen gesteuert. An dieser Stelle wird nur kurz auf diejenigen Aspekte eingegangen, die sich überhaupt im Drehbuch einstellen lassen. Director unterstützt alle gängigen Sound-Dateiformate. Beim Importieren von Sound werden keine besonderen Fragen gestellt – die Audiodateien werden sofort als neue Sounddarsteller importiert. Da es innerhalb von Director keine Möglichkeit gibt, diesen Darstellertyp zu bearbeiten, erscheint bei Doppelklick auf einen Sounddarsteller nur die spezifische Palette des Eigenschafteninspektors. Wenn Sie dort Schleife ankreuzen, wird der Sound immer wieder von neuem abgespielt, so lange der Abspielkopf im Drehbuch im Bereich seines Sprites bleibt. Unter Dauer wird die Abspieldauer des Sounds in Sekunden angegeben. Sample-Rate, Auflösung (Sampling-Tiefe) und Kanäle wurden bereits weiter oben behandelt. Im Drehbuch wird Sound folgendermaßen verwendet: Zunächst müssen Sie die Effekt-Kanäle des Drehbuchs anzeigen, dafür müssen Sie auf den Knopf rechts neben den Frame-Nummern drücken. Es erscheinen unter anderem die beiden Soundkanäle des Drehbuchs. Um einen Sound im Drehbuch zu platzieren, brauchen Sie ihn nur mit der Maus aus der Besetzung in einen der beiden Soundkanäle zu ziehen. Es erscheint entsprechend ein Sound-Sprite. Das erste und das letzte Frame regeln Abspielbeginn und -ende des Sounds. Ist der Sound selbst länger als die hier gewählte Dauer, dann endet er abrupt; ist er dagegen kürzer, dann wird er, ungeachtet der überragenden Sprite-Dauer, nicht mehr abgespielt – es sei denn, die Schleife ist eingestellt. Der Import und die Verwendung von Video erfolgen ähnlich wie bei Sound. Der wichtigste Unterschied besteht darin, dass Videosprites in den gewöhnlichen Sprite-Kanälen des Drehbuchs angelegt werden. 3-D-Darsteller importieren Interaktive 3-D-Darsteller müssen im Shockwave-3-D-Format (Dateiendung .w3d) importiert werden. Gängige 3-D-Software wie die weiter oben vorgestellten Programme 3d s max und Cinema 4D enthalten Exportfunktionen für dieses Format. Wenn Sie einen solchen Darsteller importiert haben, können Sie per Doppelklick in der Besetzung das Shockwave-3-D-Fenster öffnen. Hier lassen sich die Anfangsansicht und zahlreiche weitere Aspekte der importierten 3-D-Welt genau einstellen. Die interaktive Steuerung von 3-D-Sprites, deren Darsteller wie gewöhnlich auf die Bühne gezogen werden, besteht aus sehr komplexen Lingo-Befehlen, deren Erläuterung den Rahmen dieses Abschnitts sprengen würden. Sie können allerdings eine Reihe gut dokumentierter Verhalten aus der Bibliothek auf Ihre 3-D-Sprites ziehen, um sie mit der gewünschten Funktionalität auszustatten. Filmschleifen-DarstellerEine beliebige Animationsinformation aus dem Drehbuch kann wiederum als neuer Darsteller abgelegt werden. Dazu wird die Animation auf der Bühne fertig erstellt. Wichtig ist, dass alles Erforderliche bereits voreingestellt wird. Besonders relevant ist die Einstellung der Farbeffekte der Sprites, denn nachträglich lässt sich nichts mehr ändern. Sie können die erstellte Animation einfach im Drehbuch auswählen und in die Besetzung ziehen. Dadurch entsteht eine Filmschleife, die die ursprüngliche Animation enthält. Diese Filmschleife kann wiederum auf die Bühne gezogen und als Sprite verwendet werden. Filmschleifen können ihrerseits Filmschleifen-Sprites enthalten und auf diese Weise beliebig tief ineinander verschachtelt werden. 10.5.3 Lingo-Grundlagen
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1. | Erstellen Sie eine beliebige Animation. |
| 2. | Doppelklicken Sie im letzten Frame der Animation in den Skriptkanal, der sich unmittelbar über den Frame-Nummern befindet. Es öffnet sich das Skriptfenster, das Sie übrigens auch über Fenster • Skript oder (STRG) + (0) öffnen können. Hier steht bereits der folgende vorgefertigte Code: |
on exitFrame me end
| Der Cursor befindet sich zwischen diesen beiden Zeilen. | |
| 3. | Tragen Sie an der Stelle, an der sich der Cursor befindet, die folgende Codezeile ein: |
go to the frame
| Das ganze Skript sieht nun folgendermaßen aus: | |
on exitFrame me go to the frame end
| 4. | Erstellen Sie im letzten Frame des Films ein Button-Sprite. Es kann sich dabei um eine Taste aus der Werkzeugpalette handeln, aber auch um ein beliebiges Bitmap oder Ähnliches. |
| 5. | Markieren Sie dieses Sprite und wechseln Sie auf die Inspektor-Registerkarte Verhalten oder klicken Sie auf das Zahnrad-Symbol in der Sprite-Überlagerung. |
| 6. | Klicken Sie im Verhaltensinspektor auf das Popup + und wählen Sie Neues Verhalten. In einem kleinen Dialog werden Sie gebeten, einen Namen für das Verhalten einzugeben – tippen Sie den Namen »nochmal« ein. |
| 7. | Klicken Sie anschließend auf den Skript-Button im Verhaltensinspektor. Es erscheint wieder das Skriptfenster zur Bearbeitung des neuen Skripts. Geben Sie hier Folgendes ein: |
on mouseUp
go to frame 1
end
Nun können Sie den Film starten – in der normalen Arbeitsumgebung von Director werden Lingo-Skripte einfach ausgeführt.
In diesem Beispiel haben Sie zwei verschiedene Arten von Lingo-Skripten erstellt: Das erste ist ein Frame-Skript, das sich im Skriptkanal des Drehbuchs befindet und automatisch ausgeführt wird, wenn ein Ereignis im Zusammenhang mit diesem Frame stattfindet (siehe unten). Das andere ist ein Sprite-Skript, das einem bestimmten Sprite im Drehbuch zugewiesen wird – es wird meist ausgeführt, wenn der Benutzer eine bestimmte Aktion wie einen Mausklick oder Tastendruck ausführt.
Lingo-Skripte bestehen grundsätzlich aus Ereignisprozeduren, die im Englischen als Event-Handler bezeichnet werden. Formal sieht eine Lingo-Ereignisprozedur so aus:
on EREIGNISNAME -- irgendwelche Befehle end
Die allgemeine Funktionsweise der Ereignisbehandlung haben Sie bereits in Kapitel 6, Konzepte der Programmierung, am Beispiel der Java-GUI-Programmierung kennen gelernt. Es lassen sich zwei Grundtypen von Ereignissen voneinander unterscheiden:
| Film-Ereignisse treten automatisch im Verlauf des Films auf. Beispiele: startMovie wird ausgeführt, wenn der Film gerade startet; exitFrame wird aufgerufen, wenn der Abspielkopf das aktuelle Frame gerade verlässt. |
| Benutzer-Ereignisse werden interaktiv vom Benutzer erzeugt. Zum Beispiel wird mouseUp beim Loslassen der Maustaste aufgerufen, während keyDown bei einem Tastendruck ausgeführt wird. |
Wird eine Ereignisprozedur durch das entsprechende Ereignis gestartet, so werden nacheinander alle Befehle bis zum end ausgeführt.
Das erste Skript im obigen Beispiel reagiert auf das Ereignis exitFrame: Dies ist der Impuls des Abspielkopfs, das aktuelle Frame zu verlassen und das nächste anzusteuern.
Die go to-Befehle
Die Anweisung go to (wahlweise einfach go) springt zum angegebenen Frame. Die Eigenschaft the frame ist ein Verweis auf das aktuelle Frame selbst. Mittels go to the frame wird der Film also dauerhaft im aktuellen Frame festgehalten. Auf diese Weise wird in Director ein Standbild realisiert, was in vielen Präsentationen sehr wichtig ist.
Das zweite Skript im Beispiel reagiert auf das Benutzer-Ereignis mouseUp, also auf das Loslassen der Maustaste. Da das Skript einem bestimmten Sprite zugeordnet ist, reagiert dieses Skript nur dann, wenn die Maustaste vorher innerhalb des Skripts gedrückt und auch dort wieder losgelassen wurde.
Die Anweisung go to frame 1 in diesem Skript dient dazu, zum Frame Nummer 1, also dem ersten Frame des Films, zu springen. Allgemein bedeutet go to frame NUMMER, dass der Film zu dem Frame mit der angegebenen Nummer springen soll.
Im ersten Frame eines Films, einem Standbild, soll ein kleines Menü mit zwei Auswahlmöglichkeiten (Buttons) angezeigt werden. Bei Klick auf diese Buttons springt der Film zu verschiedenen Stellen, spielt jeweils eine kleine Animation ab und bewegt sich dann wieder automatisch zum Hauptmenü.
Das erste Frame erhält zu diesem Zweck das folgende Frame-Skript:
on exitFrame go to the frame end
Die beiden Buttons erhalten folgende Skripte, wenn man davon ausgeht, dass die beiden Animationen bei Frame 10 beziehungsweise 40 beginnen:
on mouseUp go to frame 1 end
beziehungsweise
on mouseUp go to frame 4 end
Am Ende der beiden Animationssequenzen, also in deren jeweiligem letzten Frame, wird das folgende Frame-Skript hinzugefügt:
on exitFrame go to frame 1 end
Es dient dazu, wieder zum Hauptmenü zurückzugelangen.
Skript-Darsteller mehrfach einsetzen
Sie können dafür übrigens zweimal denselben Skript-Darsteller benutzen – Sie müssen ihn beim zweiten Mal einfach nur aus der Besetzung in das Frame im Skriptkanal hineinziehen. Solche »recycelten« Skript-Darsteller leiden allerdings unter demselben Problem wie alle anderen Darsteller: Werden sie geändert, so ändern sie sich überall, wo sie eingesetzt werden. Bevor Sie also einfach ein Skript ändern, stellen Sie sicher, dass dieses Skript nicht auch noch an anderer Stelle verwendet wird, an der es vielleicht nicht geändert werden soll. In solch einem Fall müssen Sie erst den Skript-Darsteller kopieren und neu zuordnen.
Eine Verbesserung der Übersichtlichkeit ergibt sich, wenn Sie nicht mit Frame-Nummern, sondern mit Frame-Markierungen arbeiten. Eine Frame-Markierung ist eine Bezeichnung, die einem Frame in der Leiste über den Frame-Nummern im Drehbuch zugewiesen wird.
Ganz links oben im Drehbuch befindet sich übrigens ein Popup-Menü, in dem alle Markierungen aufgelistet sind, sowie Buttons, um zur vorherigen beziehungsweise zur nächsten Markierung zu blättern. Sie können eine Markierung verschieben, indem Sie die Maus genau darauf positionieren (andernfalls entsteht eine neue Markierung) und ziehen. Eine Markierung lässt sich umbenennen, indem Sie auf den Namen klicken und einen neuen eintippen. Entfernt wird ein Label, indem Sie es nach oben wegziehen.
Wenn Sie sich per Lingo auf eine Markierung beziehen, muss ihr Name in Anführungszeichen stehen.
Bezeichnen Sie im aktuellen Beispiel das Menü mit der Markierung menue, den Beginn der ersten Animation (Frame 10) mit ani1 und den Beginn der zweiten mit ani2.
Die geänderten Skripte lauten folgendermaßen:
-- Erster Animationsbutton: on mouseUp go to frame "ani1" end -- Zweiter Animationsbutton: on mouseUp go to frame "ani2" end -- Frame-Skript am Ende der Animationssequenzen: on exitFrame go to frame "menue" end
Relative Sprungziele
Wenn Sie Markierungen verwenden, können Sie übrigens alternativ relative Sprungziele angeben:
| go loop springt zum unmittelbar vorherigen Label. Wenn das aktuelle Frame selbst ein Label besitzt, wirkt es natürlich wie go to the frame. |
| go next springt zum nächsten Label. |
| go previous springt zu demjenigen Label, das sich vor dem unmittelbar vorhergehenden befindet. |
Diese Befehle sind für »lineares Blättern« geeignet. Wenn alle Sektionen, Seiten oder sonstige Ordnungseinheiten mit je einem Label versehen sind, kann zum Beispiel ein Weiter-Button fest mit go next und der Zurück-Button mit go previous versehen werden.
Andere Filme laden
Es gibt neben dem Sprung zu einem anderen Frame zudem noch die Möglichkeit, zu einem anderen Director-Film zu springen. Dazu wird die Anweisung go to movie "Filmname" verwendet. Die Windows-Dateiendung .dir sollten Sie an dieser Stelle weglassen. Beim späteren Veröffentlichen des Films kann es nämlich sein, dass die aufgerufene Datei eine andere Endung erhält, weil sie beispielsweise als geschützter Director-Film oder als Shockwave-Film für das Web abgespeichert wird – wenn Sie keine Endung angeben, ist sie Director egal.
In Lingo wird eine Variable durch die erste Wertzuweisung (Initialisierung) erzeugt. In alten Versionen musste auf jeden Fall der Befehl set dafür verwendet werden, der noch heute funktioniert:
set a = 3
Seit Director 7 können Sie dagegen einfach Folgendes schreiben:
a = 3
Variablen-Geltungsbereiche
Genau wie die meisten Programmiersprachen unterscheidet auch Lingo zwischen lokalen und globalen Variablen. Eine lokale Variable gilt nur innerhalb einer Ereignisprozedur, also zwischen on ... und end. Eine globale Variable gilt dagegen im gesamten Film.
Automatisch sind alle Variablen erst einmal lokal. Um eine Variable zur globalen zu machen, müssen Sie sie mit dem Schlüsselwort global als solche qualifizieren:
global VARIABLE
oder
global VARIABLE1, VARIABLE2, ...
Diese global-Qualifizierung muss in jeder Ereignisprozedur beziehungsweise jedem Skript wiederholt werden, in dem die globale Variable verwendet werden soll. Prinzipiell gibt es dafür zwei Möglichkeiten:
| 1. | Erwähnung innerhalb einer Ereignisprozedur, sodass die globale Variable nur innerhalb dieser Prozedur gilt: |
on prozedur1 global VARIABLE -- Anweisungen; hier ist VARIABLE global. end on prozedur2 -- Anweisungen; VARIABLE wäre hier lokal. end
| 2. | Erwähnung am Anfang eines Skripts, außerhalb aller Ereignisprozeduren: |
global VARIABLE on prozedur1 -- Anweisungen; VARIABLE ist hier global. end on prozedur2 -- Anweisungen; VARIABLE ist auch hier global. end
Variablen-Beispiel
Konkretes Beispiel: Eine Animation soll genau dreimal abgespielt werden, anschließend soll ein anderer Teil des Films folgen. Dies funktioniert folgendermaßen:
| 1. | Erstellen Sie einen neuen Film und darin am Anfang eine beliebige Animation. Platzieren Sie unmittelbar hinter der Animation ein Frame mit einer »Ende«-Botschaft. |
| 2. | Versehen Sie das allererste Frame mit der Markierung anfang. |
| 3. | Öffnen Sie, ohne irgendetwas in Drehbuch oder Besetzung zu markieren, das Skriptfenster ((STRG) + (0)). Durch dieses Vorgehen entsteht ein Film-Skript, also ein Lingo-Skript, das Anweisungen oder Prozeduren enthält, die den gesamten Film betreffen. Notieren Sie hier das folgende Skript: |
global gDurchlauf on startMovie gDurchlauf = end
| 4. | Schreiben Sie nun im letzten Frame der Animationssequenz das folgende Frame-Skript: |
global gDurchlauf on exitFrame gDurchlauf = gDurchlauf + 1 if gDurchlauf < 3 then go to frame "anfang" end
Die vordefinierte Ereignisprozedur on startMovie wird ausgeführt, wenn der Film startet, und zwar noch bevor das erste Frame abgespielt wird. Beachten Sie, dass Lingo-Manipulationen von Sprites oder anderen Drehbuch-Bestandteilen hier noch nicht stattfinden dürfen, da es zu diesem Zeitpunkt noch gar keine Bühne gibt.
Es ist üblich, die Namen globaler Variablen mit einem kleinen g zu beginnen – auf diese Weise sehen Sie auf den ersten Blick, dass sie global sind. In diesem Zusammenhang sollte darauf hingewiesen werden, dass Lingo weder bei eingebauten noch bei selbst gewählten Bezeichnern auf Groß- und Kleinschreibung achtet. Dennoch sollten Sie sich an die Konventionen halten, damit Ihre Skripte übersichtlich bleiben und auch von anderen problemlos gelesen werden können.
Beachten Sie weitere Besonderheiten der Programmiersprache Lingo, die zum Teil im obigen Beispiel deutlich geworden sind:
| Es gibt keine Kurzfassungen für Wertmanipulationen von Variablen. Sie müssen also gDurchlauf = gDurchlauf + 1 schreiben; so etwas wie gDurchlauf++ kennt Lingo nicht. |
| Die Kontrollstruktur if wird etwas anders formuliert als in den Sprachen aus der C-Tradition, die bisher in diesem Buch behandelt wurden. Wenn nur eine Anweisung von einer if-Bedingung abhängt, können Sie die Abfrage folgendermaßen in eine Zeile schreiben: |
if BEDINGUNG then BEFEHL
| Beziehen sich dagegen mehrere Anweisungen auf ein einzelnes if, funktioniert es folgendermaßen: | |
if BEDINGUNG then -- Anweisung(en) end if
| Im Zusammenhang mit if-Abfragen ist außerdem wichtig, dass die Vergleichsoperationen in Lingo anders lauten als in C-ähnlichen Sprachen: Der Gleichheitsoperator ist ein einfaches =; die Unterscheidung zwischen diesem Vergleich und der Wertzuweisung ergibt sich aus dem Kontext. Für die Ungleichheit wird <> notiert. Die logischen Verknüpfungen lauten and und or. |
| Auch Schleifen werden in Lingo etwas eigenwillig geschrieben. Eine determinierte Schleife, in der eine Variable nacheinander eine Reihe fester Werte annimmt, wird folgendermaßen formuliert: |
repeat with i = 1 to 1 -- i wird nacheinander 1, 2, ..., 1 end repeat
| Berücksichtigen Sie, dass Sie down to statt to schreiben müssen, wenn der Endwert kleiner als der Startwert ist: | |
repeat with i = 10 down to 1 -- i wird nacheinander 10, 9, ..., 1 end repeat
| Eine nicht determinierte Schleife, die vor jedem Durchgang erneut eine Bedingung überprüft, lautet in der Lingo-Syntax so: | |
repeat while AUSDRUCK -- wird ausgeführt, solange AUSDRUCK true ist end repeat
| Falls Sie Sprite- oder sonstige Filmeigenschaften innerhalb einer Schleife ändern, müssen Sie explizit dafür sorgen, dass die Bühne aktualisiert wird – während der Ausführung von Lingo-Skripten geschieht dies nämlich normalerweise nicht. Geben Sie dazu an der gewünschten Stelle den folgenden Befehl ein: | |
updateStage
Der Inhalt von Text- und Felddarstellern kann mittels Lingo gelesen und ausgewertet, aber auch manipuliert werden. Betrachten Sie als erstes kleines Beispiel den folgenden Fall: Im ersten Frame soll ein Benutzer seinen Namen eingeben und einen OK-Button drücken. Daraufhin springt der Film zu einem anderen Frame, in dem »Hallo, <Name>!« ausgegeben wird.
Legen Sie dazu im ersten Frame eines Films einen Felddarsteller namens eingabe als Sprite auf die Bühne. Mit beliebigem Dummy-Text, den Sie später wieder entfernen, können Sie die Schriftart, -größe und -farbe einstellen. Setzen Sie dieses Sprite in den Sprite-Eigenschaften auf »bearbeitbar« (Button a|b in der obersten Reihe). Erstellen Sie in diesem Frame außerdem einen OK-Button und weisen Sie dem Frame ein Standbild-Skript zu.
Das Frame, in dem die Ausgabe erfolgen soll, erhält die Markierung gruss. Ziehen Sie hier ein weiteres Textfeld mit dem Darstellernamen ausgabe auf die Bühne. Außerdem benötigt dieses Frame das folgende Frame-Skript:
on exitFrame benutzer = the text of member "eingabe" put "Hallo" && benutzer & "!" into member "ausgabe" end
Zum Schluss bekommt der OK-Button noch die Anweisung, zu dem Frame gruss zu springen:
on mouseUp go to frame "gruss" end
Die Eigenschaft the text of member "Darstellername" liefert den Textinhalt des Darstellers mit dem angegebenen Namen zurück. Der Bezug könnte genauso gut auf die Darstellernummer gerichtet sein, zum Beispiel the text of member 4. Dies ist natürlich nicht besonders ratsam, weil Darsteller später umsortiert werden können, außerdem ist es unübersichtlich. In klassischem Lingo beginnen die Namen von Eigenschaften immer mit einem vorangestellten the. Seit Version 7 ist alternativ auch die Punktschreibweise möglich, die aus moderneren Programmiersprachen entlehnt wurde. Sie können also auch Folgendes schreiben:
benutzer = member ("eingabe").text
Beachten Sie, dass die Klammern in diesem Fall nicht mehr optional, sondern verbindlich sind.
Darstellern Textinhalte zuweisen
Die Anweisung put Ausdruck into member "Darstellername" trägt den Wert des angegebenen Ausdrucks als Text in den entsprechenden Darsteller ein. Natürlich muss es sich um einen Darsteller handeln, der Text enthalten kann, also etwa einen Text-, Feld- oder Tastendarsteller.
Der Befehl put kann auch als Alternative verwendet werden, um den Wert einer Variablen zu manipulieren (wie der Zuweisungsoperator =):
put AUSDRUCK into VARIABLE
Im Übrigen kann put Ihnen das Leben erleichtern, wenn Sie nach Fehlern in Lingo-Skripten suchen: put Ausdruck ohne Bezug auf ein Ausgabefeld dient dazu, eine Ausgabe ins Nachrichtenfenster vorzunehmen. Dieses Fenster wird mittels Fenster • Nachricht oder (STRG) + (M) geöffnet und kann verwendet werden, um einzelne Lingo-Befehle einzutippen und so zu testen. Außerdem dient es der Ausgabe solcher bezugslosen put-Befehle.
Strings verketten
Die Operatoren & beziehungsweise && verketten beliebige Ausdrücke zu Zeichenketten. && fügt außerdem ein Leerzeichen hinzu.
put AUSDRUCK after member "Darsteller"
fügt den Wert des Ausdrucks ans Ende des vorhandenen Textes an, während
put AUSDRUCK before member "Darsteller"
den Wert des Ausdrucks vor dem Text des Darstellers einfügt.
Die Konstante RETURN steht übrigens für einen Zeilenumbruch, der hinzugefügt werden soll. Die Großschreibung einer solchen symbolischen Konstante ist eine Konvention und natürlich eigentlich nicht nötig.
In diesem Unterabschnitt werden einige wichtige Sprite-Eigenschaften angesprochen, die Sie dynamisch per Lingo ändern können.
Der Rollover-Effekt
Eine der wichtigsten Eigenschaften ist the member of sprite – sie wird verwendet, um den Darsteller auszutauschen, der auf der Position eines Sprites angezeigt wird. Besonders häufig wird sie eingesetzt, um einen Rollover-Effekt zu erzielen, also das dynamische Aufleuchten von Schaltflächen, die vom Mauszeiger berührt werden.
Angenommen, in Sprite 3 befindet sich im Grundzustand ein Darsteller namens normalbutton. Wenn der Mauszeiger dieses Sprite berührt, soll er durch den Darsteller leuchtbutton ersetzt werden. Zu diesem Zweck können Sie dem Sprite das folgende Skript zuweisen:
on mouseEnter set the member of sprite 3 = "leuchtbutton" end on mouseLeave set the member of sprite 3 = "normalbutton" end
Die beiden neuen Ereignisprozeduren mouseEnter beziehungsweise mouseLeave werden ausgeführt, wenn das Sprite berührt beziehungsweise wieder verlassen wird. Beachten Sie, dass die Registrierpunkte und Größen der Darsteller beim Rollover identisch sein sollten.
Sprite- und Mausposition
Im nächsten Beispiel soll ein Sprite bei jedem Mausklick an der Position des Mauszeigers auftauchen. Zu diesem Zweck benötigen Sie die folgenden Sprite-Eigenschaften: the locH of sprite (location horizontal) bezeichnet die X-Position des Sprites auf der Bühne, genauer gesagt den Abstand des Registrierpunkts zum linken Bühnenrand. the locV of sprite (location vertical) ist dagegen die Y-Position des Sprites. Diese Eigenschaften können ermittelt und verändert werden:
x = the locH of sprite 9
speichert die aktuelle X-Position von Sprite 9 in der Variablen x.
set the locV of sprite 7 = 100
setzt dagegen die Y-Position von Sprite 7 auf 100.
Darüber hinaus werden die beiden folgenden globalen Eigenschaften (Filmeigenschaften) verwendet: the mouseH ist die aktuelle X-Position der Maus; the mouseV bezeichnet ihre Y-Position.
Da das Skript auf jeden Mausklick reagieren soll, müssen Sie die Ereignisprozedur (on mouseUp) an einer ungewöhnlichen Stelle platzieren, nämlich im Frame-Skript. Eine dort platzierte mouseUp-Prozedur reagiert auf Mausklicks auf der gesamten Bühne.
Wenn es sich bei dem fraglichen Sprite um Sprite Nummer 3 handelt, lautet das entsprechende Frame-Skript so:
on mouseUp set the locH of sprite 3 = the mouseH set the locV of sprite 3 = the mouseV end on exitFrame me go to the frame end
Soll das Sprite dagegen nicht nur bei einem Klick auf die Mauskoordinaten gesetzt, sondern ständig zusammen mit dem Mauszeiger verschoben werden, dann sieht die Lösung so aus:
on exitFrame me set the locH of sprite 3 = the mouseH set the locV of sprite 3 = the mouseV go to the frame end
Das einzige Problem dabei ist, dass der normale Mauszeiger stört, da sich das Sprite nun selbst wie ein Cursor verhält. Deshalb folgt als Nächstes eine kurze Beschreibung, wie Sie den Cursor ausblenden oder modifizieren können.
Wenn Sie im vorigen Beispiel einfach den Standard-Mauszeiger loswerden möchten, können Sie in der Ereignisprozedur startMovie eines Film-Skripts folgende Anweisung eintragen:
cursor 200
Der Befehl
cursor NUMMER
setzt den Mauszeiger auf die durch NUMMER bezeichnete interne Cursor-Ressource. Die wichtigsten sind folgende:
| -1: Normaler Auswahlpfeil |
| 0: Automatisch; das Betriebssystem entscheidet selbst (Standard) |
| 1: Einfügemarke (wie in Textfeldern üblich) |
| 2: Fadenkreuz |
| 3: Balkenkreuz |
| 4: Warte-Uhr (Mac: Armbanduhr, Windows: Sanduhr) |
| 200: Cursor ausblenden (siehe obiges Beispiel) |
| 280: Hyperlink-Finger wie im Webbrowser |
Die Eigenschaft the cursor of sprite stellt den Cursor nicht allgemein um, sondern nur dann, wenn sich der Mauszeiger über dem angegebenen Sprite befindet. Das folgende Beispiel schaltet den Hyperlink-Finger ein, wenn sich die Maus über Sprite 4 befindet:
set the cursor of sprite 4 = 280
Darsteller als Cursor
Statt der eingebauten Ressourcen können Sie auch eigene Darsteller als Cursor verwenden. Zu diesem Zweck gibt es eine spezielle Schreibweise von cursor beziehungsweise the cursor of sprite:
cursor [7]
verwendet den Darsteller Nummer 7 als Cursor.
set the cursor of sprite 9 = [20]
aktiviert dagegen den Darsteller 20 als Cursor, wenn sich die Maus über Sprite 9 befindet.
Der entsprechende Darsteller muss ein 1-Bit-Bitmap-Darsteller sein und darf maximal 16 x 16 Pixel groß sein (ansonsten werden nur die oberen linken 16 x 16 Pixel verwendet). Der Registrierpunkt ist der sensitive Punkt des Cursors.
Leider ist ein Zugriff über den Darstellernamen nicht möglich, es muss stets die Nummer in der Besetzung verwendet werden. Sie können allerdings mit Hilfe der Eigenschaft
the number of member "Darstellername"
die Nummer des Darstellers ermitteln und als Argument für cursor verwenden. Angenommen, Sie haben den Darsteller 15 mit dem Namen hand als Cursor-Darsteller auserkoren. Dann können Sie statt
cursor [15]
auch Folgendes schreiben:
cursor [the number of member "hand"]
Übersichtlicher ist diese Formulierung mit einer Hilfsvariablen:
cursornum = the number of member "hand" cursor [cursornum]
Cursor-Masken
Das Problem bei solchen selbst definierten Cursor-Darstellern ist, dass ein solcher Cursor nicht einfach schwarz bleibt, sondern an seinen schwarzen Stellen jeweils die Komplementärfarbe des Untergrunds annimmt, während die weißen Stellen ohnehin transparent gesetzt werden. Um dies zu ändern, müssen Sie zusätzlich einen Cursor-Masken-Darsteller anfertigen. Dieser ist ebenfalls ein 16 x 16 Pixel großes 1-Bit-Bitmap und wird folgendermaßen auf den eigentlichen Cursor angewendet:
| Überall, wo der Maskencursor schwarz ist, werden die Pixel des eigentlichen Cursors deckend gezeichnet – je nach ihrer Farbe schwarz oder weiß. |
| Überall, wo die Maske weiß bleibt, zeigen die Pixel des eigentlichen Cursors wieder ihr Standardverhalten (siehe oben). |
Angenommen, Sie möchten Darsteller 36 als Cursor und Darsteller 37 als seine Maske verwenden:
cursor [36, 37]
Möchten Sie dagegen Darsteller 45 als Cursor und 47 als Maske verwenden, wenn Sprite 8 berührt wird, dann lautet der erforderliche Code so:
set the cursor of sprite 8 = [45, 47]
Wenn Sie einen Cursor benötigen, der nur schwarze und transparente, aber keine weißen Pixel enthält, können Sie einfach denselben Darsteller als Cursor und als Maske verwenden. Zum Beispiel:
cursor [3, 3]
Farbige, animierte Cursor
Seit Director 7 können Sie auch farbige, animierte Cursor einrichten. Dabei handelt es sich allerdings um einen separaten Darstellertyp und nicht um Bitmaps. Ein solcher Spezialcursor wird folgendermaßen erzeugt:
| 1. | Erstellen Sie eine Sequenz von Bitmap-Darstellern, aus denen die einzelnen Frames der Cursor-Animation entstehen sollen. Die Zielgröße beträgt wahlweise 16 x 16 oder 32 x 32 Pixel. |
| 2. | Rechnen Sie diese Darsteller mittels Modifizieren • Bitmap transformieren auf 8 Bit Farbtiefe herunter. |
| 3. | Wählen Sie Einfügen • Mediaelement • Cursor. Es öffnet sich der Cursoreigenschaften-Editor. |
| 4. | Rechts oben können Sie sich durch alle in Frage kommenden Darsteller blättern und diese mittels << Hinzufügen zum Cursor zusammenstellen. Links oben können Sie den Cursor mit Vorschau und Stop testen. |
| 5. | Unten können Sie einige Feineinstellungen vornehmen: Das Intervall bezeichnet die Dauer eines Cursor-Frames in Millisekunden. Die Hotspot-Position bestimmt, wo sich der sensitive Punkt des Mauszeigers befinden soll; sie wird von links oben (0, 0) aus gerechnet. Empfehlenswert ist darüber hinaus die Einstellung Auto-Maske: Nichtweiße Pixel werden automatisch deckend gezeichnet, weiße transparent. |
Dieser Dialog ergibt nach einem Klick auf OK einen neuen Cursor-Darsteller, den Sie wie gehabt mittels cursor [Darstellernummer] beziehungsweise set the cursor of sprite Kanalnummer = [Darstellernummer] aktivieren können.
In den bisherigen Beispielen wurden die einzelnen Arten von Lingo-Skripten mehr oder weniger intuitiv verwendet. An dieser Stelle finden Sie dagegen eine kurze systematische Übersicht über die einzelnen Skript-Typen:
Skript-Arten
Intern unterscheidet Director zwischen drei verschiedenen wichtigen Arten von Skripten: Verhaltens-Skript (Behavior Script), die Sammelbezeichnung für Frame-Skript und Sprite-Skript; Darsteller-Skript (Member Script) und Film-Skript (Movie Script). Insgesamt gibt es also vier verschiedene Arten von Skripts, die man unterscheiden muss:
| 1. | Sprite-Skript. Dieses Skript wird im Drehbuch unmittelbar mit einem bestimmten Sprite verknüpft. In der Regel verarbeitet ein Sprite-Skript Ereignisse, die unmittelbar dieses Sprite selbst betreffen. Normalerweise handelt es sich um eine Benutzeraktion in Bezug auf dieses Sprite: Maustaste drücken (on mouseDown), Maustaste loslassen (on mouseUp), Mauszeiger hineinrollen (on mouseEnter) und Mauszeiger herausfahren (on mouseLeave). |
| Wichtige Nicht-Benutzer-Ereignisse, die in Sprite-Skripten verarbeitet werden können, betreffen dagegen die Lebensspanne eines Sprites im Drehbuch: on beginSprite wird ausgeführt, wenn das erste Frame des Sprites abgespielt wird; on endSprite wird dagegen nach dem letzten Frame des Sprites ausgeführt. Solange eine Schleife innerhalb der Frames des Sprite-Bereichs läuft, wird dies übrigens nicht als Ende und Neubeginn des Sprites gewertet. | |
| 2. | Frame-Skript. Dieses Skript steht separat im Drehbuch, nämlich im Skriptkanal. Es verarbeitet vornehmlich Ereignisse, die das gesamte Frame betreffen, also vor allem Film-Ereignisse, die automatisch auftreten: Der Abspielkopf hat gerade dieses Frame erreicht (on enterFrame) oder schickt sich an, das Frame wieder zu verlassen (on exitFrame). Letzteres ist das häufigste (und standardmäßig eingetragene) Ereignis für Frame-Skripte. Ein weiteres abfragbares Ereignis: Der Film hat gerade nichts Besseres zu tun, befindet sich also im Leerlauf (on idle). |
| Daneben werden (seltener) auch Benutzer-Ereignisse in Frame-Skripten verarbeitet – Mausereignisse (nur mouseDown und mouseUp) betreffen dann zum Beispiel einen Klick an einer beliebigen Stelle auf der Bühne. Die Rollover-Ereignisse (on mouseEnter und on mouseLeave) werden hier verständlicherweise nicht verarbeitet, da ein Frame-Skript keine Information darüber erhält, ob ein Sprite vom Mauszeiger berührt wird. | |
| Sinnvoller (und häufiger anzutreffen, da es keinen anderen passenden Ort dafür gibt) sind die Tastatur-Ereignisse: on keyDown wird ausgeführt, wenn eine Taste betätigt wurde, on keyUp dagegen beim Loslassen einer Taste. Welche Taste gedrückt wird beziehungsweise wurde, steht in der globalen Eigenschaft the key. | |
| 3. | Darsteller-Skript. Ein Darsteller-Skript wird unmittelbar einem Darsteller zugeordnet. Durch Anklicken eines Darstellers und des Skript-Buttons oben in der Besetzung (oder in einem der verschiedenen Darsteller-Bearbeitungsfenster) wird ein neues Skript hinzugefügt, das automatisch die folgenden vorgefertigten Skriptzeilen enthält: |
on mouseUp end
| Daran zeigt sich bereits, dass ein Darsteller-Skript eine ähnliche Aufgabe hat wie ein Sprite-Skript: Es soll Ereignisse verarbeiten, die unmittelbar den Darsteller selbst betreffen, also in der Regel Benutzer-Ereignisse. Ein solches Skript betrifft konkret jedes Sprite dieses Darstellers. Der einzige Hinweis auf die Anwesenheit eines Darsteller-Skripts ist das kleine Skriptsymbol bei dem jeweiligen Darsteller in der Setzkasten-Ansicht der Besetzung. Sie sollten diese Skriptsorte nur dann einsetzen, wenn Sie sich sicher sind, dass der entsprechende Darsteller immer und überall mit denselben Lingo-Befehlen belegt werden soll – zum Beispiel ein globaler Quit-Button. | |
| 4. | Film-Skript. Ein Film-Skript wird erzeugt, indem Sie das Skriptfenster öffnen, ohne dass irgendein Frame, Darsteller oder Sprite markiert ist. Es gilt für den gesamten Film und verarbeitet deshalb vornehmlich Ereignisse, die den Film als solchen betreffen. |
| Zu den wichtigsten dieser Ereignisse gehören folgende: on startMovie markiert den Beginn des Films und wird häufig für bestimmte Initialisierungen (Voreinstellungen) verwendet, zum Beispiel für die Anfangswerte globaler Variablen oder Eigenschaften. on stopMovie kennzeichnet dagegen das Ende des Films und wird manchmal für »Aufräumarbeiten« benutzt. | |
| Hier sehen Sie ein kombiniertes Praxisbeispiel: Beim Start des Films soll die Systemfarbe auf 8 Bit umgestellt werden, weil bestimmte Spezialeffekte (der Palettenkanal und so weiter) nur so funktionieren. Aus Höflichkeitsgründen gegenüber den Benutzern ist es natürlich notwendig, diese Farbtiefe (immerhin eine wichtige globale Betriebssystemeinstellung!) beim Beenden des Films wieder zurückzusetzen. Das folgende Filmskript ist eine passende Lösung: | |
global gColorDepth on startMovie -- Originalfarbtiefe speichern: gColorDepth = the colorDepth -- Farbtiefe auf 8 Bit setzen: set the colorDepth = 8 end on stopMovie -- Farbtiefe wiederherstellen: set the colorDepth = gColorDepth end
| Wie Sie wahrscheinlich schon längst bemerkt haben, leiten zwei Minuszeichen (--) einen Kommentar ein. Da es keine mehrzeiligen Kommentare gibt, enthält das Skriptfenster zwei Buttons, um aus mehreren ausgewählten Zeilen Kommentare zu machen beziehungsweise die Kommentarzeichen wieder zu entfernen. | |
| Eine andere beliebte Eigenschaft von Filmskripten ist die Möglichkeit, dort selbst definierte Ereignisprozeduren zu platzieren: | |
on meinEreignis -- beliebige Anweisungen end
| Diese Definition entspricht einer allgemeinen Funktion in einer prozeduralen Programmiersprache: Wenn Sie in irgendeinem Skript meinEreignis schreiben, wird diese Prozedur aufgerufen. Selbst definierte Lingo-Prozeduren können übrigens auch Parameter entgegennehmen. Das folgende Beispiel nimmt zwei Werte entgegen, addiert sie und gibt die Summe in das Textfeld ausgabe aus: | |
on summe a, b put a && "+" && b && "=" && a + b into member "ausgabe" end
| Aufrufen können Sie diese Funktion beispielsweise als summe 3, 5. | |
Für die Programmierung von Spielen oder die Realisation von Drag-and-Drop-Verhalten in Director ist es oft wichtig, zu überprüfen, ob ein Sprite ein anderes berührt oder enthält. Zu diesem Zweck sind die Funktionen within beziehungsweise intersects definiert.
Der folgende Ausdruck ist true, wenn Sprite 3 vollkommen im Begrenzungsrechteck von Sprite 5 enthalten ist:
sprite 3 within 5
Wenn die Begrenzungsrechtecke von Sprite 7 und Sprite 17 einander berühren, ist dagegen die folgende Bedingung true:
sprite 7 intersects 17
Eigenschaften sind ein interessantes, in dieser Form nur in Lingo verwirklichtes Konzept, um mehrere Zustände voneinander zu unterscheiden, die nicht unbedingt numerisch ausdrückbar sind. Beispielsweise besitzt ein Fernsehgerät die drei grundlegenden Zustände an, aus und Standby. An und aus ließen sich gut durch 1 und 0 beziehungsweise true und false ausdrücken. Allerdings wäre es seltsam, Standby durch 0.5 darzustellen. Besser lassen sich diese drei Zustände durch unterschiedliche Eigenschaften ausdrücken:
tv_zustand = #an tv_zustand = #aus tv_zustand = #standby
Eigenschaftsbezeichner beginnen mit einer Raute. Eine Eigenschaft ist automatisch definiert, wenn sie das erste Mal benutzt wird.
Lingo verwendet an manchen Stellen vordefinierte Eigenschaften, etwa zur Ermittlung des Darstellertyps: Die Eigenschaft the type of member liefert eine Eigenschaft wie #bitmap für Bitmap-Darsteller, #text für Textdarsteller oder #script für Skript-Darsteller zurück.
Die Liste ist die Lingo-Entsprechung eines Arrays. Aufgrund ihrer speziellen Eigenschaften ist sie allerdings eher mit der Liste und dem Hash in Perl (siehe Kapitel 5, Grundlagen der Programmierung) vergleichbar: In einer Liste können beliebig viele Werte abgelegt sein, sie können durch eine Kombination von Variablenname und Indexangabe gelesen und verändert werden.
Es gibt zwei Arten von Listen: einfache Listen, bei denen der Index eine ganze Zahl ist, und Eigenschaftslisten (Property Lists), bei denen der Index eine Eigenschaft ist – Letzteres entspricht in etwa einem Perl-Hash oder einem »assoziativen Array«.
Eine einfache Liste wird folgendermaßen eingerichtet:
liste = []
erzeugt eine leere Liste (noch ohne Elemente). Sie können dagegen folgendermaßen eine Liste erzeugen, die von Anfang an Werte enthält:
liste2 = [3, 5, ...]
Mit Hilfe von liste2[2] können Sie auf das zweite Element dieser Liste zugreifen – anders als in C und verwandten Programmiersprachen zählt der Index nicht ab 0, sondern ab 1.
liste[3] = "hallo"
weist dem dritten Element von liste den neuen Wert "hallo" zu. Wie die meisten Skriptsprachen ist auch Lingo untypisiert; eine Liste kann Werte vieler verschiedener Datentypen enthalten.
Eigenschaftenlisten
Eine leere Eigenschaftenliste wird folgendermaßen definiert:
pList = [:]
Eine Eigenschaftenliste, die bereits Werte enthält, dagegen so:
wochentage = [#mo:"Montag", #di:"Dienstag", ..., #sa:Samstag, #so:"Sonntag"]
Lesen können Sie ein Element einer Eigenschaftenliste zum Beispiel mittels wochentage[#di]. Die Zuweisung eines neuen Werts für ein einzelnes Feld ist ebenfalls sehr einfach. Angenommen, Sie möchten die Wochentagsliste für norddeutsche Benutzer umgestalten:
wochentage[#sa] = "Sonnabend"
Wie bereits oben erwähnt, werden Audio- und Video-Playback in Director vornehmlich über Lingo-Skripte gesteuert. Hier finden Sie deshalb die wichtigsten Befehle.
Lautstärke
Die globale Lautstärke, die die Werte 0 (aus) bis 7 (ganz laut) annehmen kann, lässt sich über die Eigenschaft the soundLevel einstellen:
set the soundLevel = 7 -- ganz laut put the soundLevel into member "vol" -- Wert anzeigen
Die beiden Drehbuch-Soundkanäle besitzen dagegen individuelle Lautstärkenwerte zwischen 0 und 255:
set the volume of sound 1 = 127 -- Kanal 1 mittel laut2 = the volume of sound 2 -- Kanal 2 => Variable
Für die Regelung des Abspielverhaltens von Sound gibt es darüber hinaus eine Reihe von Soundbefehlen:
| sound pause 1 hält das Abspielen des Sounds in Kanal 1 an. |
| sound play 1 spielt den Sound in Kanal 1 weiter. |
| sound stop 2 stoppt das Abspielen von Sound in Kanal 2 ganz; mit einem einfachen play lässt sich dasselbe Sound-Sprite nicht wieder aktivieren. |
| sound fadeIn 1, 100 blendet den Sound in Kanal 1 in 100 Millisekunden von 0 auf die volle Lautstärke. |
| sound fadeOut 2, 1000 blendet den Sound in Kanal 2 über eine Sekunde von der aktuellen Lautstärke auf 0. |
| puppetSound 1, "lied" spielt in Kanal 1 den Sounddarsteller Lied ab, ohne dass er im Drehbuch vorkommen muss. |
| sound playFile 2, "hallo.wav" lädt die externe Sounddatei hallo.wav und spielt sie in Kanal 2 ab. |
Videosteuerung
Digitalvideo-Sprites werden je nach Dateityp (QuickTime oder AVI) über etwas unterschiedliche Befehle gesteuert. Die wichtigsten Einstellungen für Video können Sie aber allgemein gültig über die folgenden Eigenschaften vornehmen:
| the movieRate of sprite ist die relative Abspielrate des Video-Sprites: Ein normal laufender Film hat den Wert 1, ein stehender den Wert 0. Sie können den Film also abspielen und wieder anhalten, indem Sie diese Eigenschaft setzen. Durch höhere positive Werte können Sie einen schnellen Vorlauf realisieren, durch negative einen Rücklauf. |
| the movieTime of sprite gibt die seit Anfang des Videofilms bis zur aktuellen Position verstrichene Zeit an. Sie können einen Film auf Anfang setzen, indem Sie dieser Eigenschaft den Wert 0 zuweisen. |
| the duration of member betrifft nicht das Video-Sprite, sondern den zugrunde liegenden Darsteller: Die Eigenschaft gibt die Gesamtdauer des importierten Films an; sie kann nur gelesen, aber nicht eingestellt werden. Sie können die Eigenschaft the movieTime of sprite auf diesen Wert setzen, um den Film ganz ans Ende zu spulen. |
Nachdem Sie einen Director-Film fertig gestellt haben, müssen Sie ihn in ein Format bringen, in dem Sie ihn veröffentlichen können. Je nach Einsatzzweck gibt es dafür grundsätzlich zwei verschiedene Möglichkeiten:
| Ein Projektor ist ein selbstlaufendes Programm, das einen Director-Film auf einem Rechner abspielt, auf dem Director nicht vorhanden ist. Der Projektor ist die übliche Art und Weise, Director-Produktionen auf CD oder DVD zu vertreiben. |
| Ein Shockwave-Film ist dagegen ein stark komprimierter Director-Film, der in einem Webbrowser abgespielt werden kann. Benutzer benötigen zu diesem Zweck den Shockwave-Player, der kostenlos bei Macromedia heruntergeladen werden kann. Unter www.shockwave.com betreibt Macromedia übrigens ein umfangreiches Unterhaltungsangebot, das aus zahlreichen Spielen, Cartoons und Musikangeboten im Shockwave-Format besteht. |
In diesem Unterabschnitt wird kurz besprochen, wie Sie die beiden Arten exportierter Filme herstellen und verwenden können.
Um einen Projektor zu erstellen, müssen Sie die Option Datei • Projektor erstellen wählen. Beachten Sie, dass der Projektor nicht unbedingt etwas mit dem aktuell geöffneten Film zu tun haben muss. Sie müssen die zu verwendenden Filme ohnehin separat aussuchen. In dem Dialog müssen Sie deshalb als Erstes wählen, welche Filme zum Projektor gehören sollen. Sie müssen dabei nur dann mehrere Filme auswählen, wenn diese einander nicht per Lingo aufrufen – der Projektor kann auch zu den verknüpften Filmen springen, wenn sie als separate Dateien beigelegt werden. Bei öffentlich vertriebenen CD-ROMs sollten Sie solche Filme allerdings schützen: Wählen Sie Xtras • Filme aktualisieren und klicken Sie auf Schützen. Der Film wird als Datei mit der Endung .dxr gespeichert. Solange Sie sämtliche go to movie-Aktionen ohne Dateiendung geschrieben haben, funktionieren sie auch nach der Umwandlung in geschützte Filme noch tadellos.
Projektor-Optionen
Nachdem Sie alle gewünschten Filme ausgewählt haben, können Sie unter Optionen das genaue Abspielverhalten des Projektors bestimmen, beispielsweise können Sie sich zwischen Vollbild- und Fensterdarstellung entscheiden. Die Bühne wird bei der Option »Vollbild« allerdings nicht etwa hochskaliert. Stattdessen erscheint außen ein Rahmen in der Original-Hintergrundfarbe des Films. Wichtig ist auch, dass Sie die Option Alle Filme abspielen ankreuzen, wenn Sie mehrere Filme für die Aufnahme in den Projektor ausgewählt haben, die einander nicht automatisch aufrufen, sondern einfach nacheinander abgespielt werden sollen.
Unter Windows besitzt der fertige Projektor die Dateiendung .exe; der Mac registriert die Ausführbarkeit der Datei dagegen auf seine Weise. Beachten Sie, dass sich mit der Windows-Version von Director nur Projektoren für Windows erstellen lassen, während der Mac-Director sie sowohl für Mac OS X als auch separat für Mac OS 9 erzeugen kann.
Der nächste Schritt besteht darin, den fertigen Projektor – meist je eine Fassung für Macintosh und Windows – auf eine CD zu brennen. Beachten Sie dazu die Hinweise zum CD-Brennen in Kapitel 3, Die Hardware.
Die Lizenzpolitik von Macromedia verlangt übrigens, dass Sie auf der Verpackung und/oder im Abspann Ihrer Multimedia-CD-ROM, die Sie als Projektor liefern, das Macromedia-Logo und die Beschriftung »Made with Macromedia« anbringen. Entsprechende Vorlagen finden Sie auf Ihrer Director-CD.
Um einen Director-Film im Shockwave-Format für die Verwendung auf einer Webseite zu exportieren, müssen Sie Datei • Einstellungen für Veröffentlichungen wählen. Hier können Sie nicht nur eine Shockwave-Datei (Endung .dcr) erstellen, sondern auch automatisch die zugehörige HTML-Datei (Webseite) erzeugen lassen. Für diesen Verwendungszweck ist die Voreinstellung Shockwave-Standard gedacht. Nachdem Sie die passenden Voreinstellungen getroffen haben, können Sie sie mittels Datei • Veröffentlichen in der Praxis anwenden. Anschließend können Sie die HTML-Datei im Browser öffnen, um Ihren Shockwave-Film zu testen.
Um Shockwave-Filme einzeln zu erstellen, für die Sie den HTML-Code selbst erstellen möchten, können Sie stattdessen die bereits erwähnte Funktion Xtras • Filme aktualisieren verwenden und dort den Punkt In Shockwave-Film(e) konvertieren auswählen. Wie Sie das notwendige HTML zum Einbinden von Shockwave-Filmen schreiben, steht in Kapitel 16, HTML und XHTML.
| << zurück |
| ||||||||||||
| ||||||||||||
| ||||||||||||
| ||||||||||||
| ||||||||||||
Copyright © Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.