Home - Über mich - Bugastadt 2001 - Ausflüge & Reisen - Texte - Alles Kino - Theater & Kabarett - Gabi gucken - Credits |
Foto: Uwe Pirr Informatik |
Programmieren in HyperTalk, Teil IVWenn schon "ein Bild mehr als tausend Worte" sagt, wieviel mehr sagt dann erst eine animierte Bildsequenz aus? Und so wollen wir im vierten Teil dieses kleinen HyperTalk-Workshops uns mit den Möglichkeiten beschäftigen, die HyperCard uns bietet, um eigene kleine Animationen zu gestalten. Zwar besitzt HyperCard nicht die Animationsmöglichkeiten, die entsprechend spezialisierte Programme wie etwa Macromind Director bieten, aber für kleine Sequenzen und zur Programmierung von einfachen Spielen reichen die Fähigkeiten durchaus.Unser erstes kleines Beispiel führt uns in die Animation mit HyperCard ein (Bild 1). Wir legen uns als erstes einen neuen Stack an. Im Hintergrund-Mode zeichnen wir die Berge, den See und den Himmel (den "Zeichenblock" habe ich aus dem mit HyperCard mitgelieferten Stack Background Art entnommen). Die Knöpfe prev, quit und next können Sie ebenfalls als Background-Buttons anlegen (Listing 1). Da wir allerdings in diesem Stack fast jede Karte mit einem eigenen Hintergrund versehen - auch wenn alle Hintergründe aus ästhetischen Gründen ähnlich aussehen - ist dies an dieser Stelle bedeutungslos. Wichtig ist nur, daß diese Knöpfe auf allen Karten das gleiche Skript beinhalten.
Bild 1: Titelkarte
Bild 2: HyperCards Icon-Editor
Den Knopf Juggler belegen wir mit dem Icon "Juggler", das die niedrigste ID-Nummer besitzt. Bei mir war das die Nummer 21573. Diese Nummer kann jedoch bei anderen HyperCard-Versionen eine andere sein. Dann dürfen wir endlich in den Vordergrund-Modus gehen und die Insel zeichnen. Ich habe sie ebenfalls aus dem Arts Bit Stack entnommen und bearbeitet. Wichtig ist, in das Türmchen mit dem Radiergummi ein Fenster zu "zeichnen" in das der Jongleur sichtbar hineinpaßt. Nun haben wir alle Vorbereitungen getroffen und können unsere Animationen programmieren. Visual EffectsDie einfachste Form der Animation, die HyperCard erzeugen kann, sind Überblendeffekte von einer Karte zur nächsten. Die Programmierung ist simpel, für den Knopf next lautet sie z.B.:
on mouseUp visual effect wipe left slow go next cd end mouseUpDer "Wischer nach links" ist nur einer von vielen möglichen Überblendungen. In der Dialogbox zu den Knöpfen finden sie unter "Effect..." noch viele weitere, die alle mit der Geschwindigkeit fast, normal, slow und very slow programmiert werden können. Bitte experimentieren Sie ruhig mit diesen Effekten, um sie alle einmal kennenzulernen. HyperCard schreibt den entsprechenden Programmteil sogar selber, wenn Sie die Überblendeffekte in der Dialogbox auswählen. Probieren Sie das aus und schauen Sie dann im Skript nach, was passiert. Icon-AnimationEine weitere einfache Form der Animation führen wir am Beispiel des Jongleurs vor: In jedem gedachten Zeittick wechseln wir einfach das Icon des Knopfes "Juggler" aus:
put 21573 into jugg repeat with i = 1 to 85 set the icon of bg button "Juggler" to jugg + i MOD 4 end repeatBei HyperCard werden vier verschiedenen Juggler-Icons mitgeliefert, die - wie schon oben erwähnt - in meinem Stack die Nummern 21573 bis 21576 tragen. Obiges Codefragment sorgt mit Hilfe des Modulo-Operators dafür, daß sich 85 mal das Icon ändert. Dadurch entsteht, wie bei einem Daumenkino, der Eindruck der Bewegung. Der Jongleur spielt mit den Bällen. Eine weitere Form der Icon-Animation ist die Veränderung des Ortes des Icon. Wenn wir in obige Schleife noch folgendes einfügen,
put 50 into xKoord put 230 into yKoord repeat with i = 1 to 85 add 5 to xKoord set the loc of bg button "Kogge" to xKoord, yKoord end repeatdann bewegt sich die Kogge von links nach rechts über unsere Karte. Da die Kogge ein Backgroundbutton ist, unsere Insel aber im Vordergrund gezeichnet wurde, sieht es so aus, als ob die Kogge hinter unserer Insel vorbeisegelt. Dieser kleine Trick gibt der Animation die Illusion von Tiefe. Je nach Leistung Ihres Rechners erscheint die Bewegung mehr oder weniger ruckartig. Insbesondere, wenn HyperCard viel neuzeichnen muß - z.B. wenn die Kogge hinter der Insel liegt - kann die Bewegung sehr langsam werden. Wenn die Animation zu langsam abläuft, prüfen sie im Kontrollfeld "Gemeinschaftsfunktionen", ob File Sharing ausgeschaltet ist. Ausgeschaltetes File Sharing beschleunigt HyperCard gerade bei der Grafikausgabe um ein Vielfaches. Alle diese Animation sind im Knopf Animate untergebracht. Wir werden im Verlauf dieses Kursteiles noch eine Möglichkeit kennenlernen, Animationen fließender ablaufen zu lassen. Text AnimationEine ebenfalls simple, aber eindrucksvolle Animation kann mit folgendem Codefragment erzeugt werden:
set textFont to "New York" set textSize to 24 set textStyle to outline click at 75, 45 type "MacOpen proudly presents:" wait 2 seconds doMenu "Revert" click at 75, 45 type "Animations with HyperCard" wait 2 seconds doMenu "Revert"Hier wird einfach ein Titel oben in die Karte geschrieben und wieder gelöscht. Ebenso einfach lassen sich Texte programmgesteuert in Textfelder schreiben und wieder löschen. Textfelder lassen sich wie Buttons mit set the loc of [cd, bg] field <name> to <x, y> bewegen. (Oder auch mit drag, siehe unten.) Geschickt eingesetzt lassen sich so fast alle Formen von Rolltiteln, wie wir sie aus dem Kino kennen, in HyperCard verwirklichen. Zwischen Vorder- und Hintergrundbild wechselnFür die nächste Animation benötigen wir eine neue Karte. Diese legen wir jedoch nicht mir "New Card", sondern mit "New Background" an, da wir den Background der Titelkarte nicht mitkopieren wollen. Wenn Sie möchten, können sie sich wieder den Zeichenblock als Hintergrundbild anlegen, nötig ist dies jedoch nicht. Sie sollten allerdings die drei Hintergrundknöpfe von der Titelkarte auf unsere neue Karte kopieren.
Bild 3: Hintergrundzeichnung
Bild 4: Vordergrund der Mini-Anatomie
on mouseUp if the hilite of me is TRUE then -- hide bg picture show cd picture set the name of me to "Ausziehen" set the hilite of me to FALSE else hide cd picture -- show bg picture set the hilite of me to TRUE set the name of me to "Anziehen" end if end mouseUpWer diese Karte zu einer kompletten Anatomie ausarbeiten möchte, sollte folgendes beachten: Es ist sehr mühselig, die einzelnen Linien und Beschriftungen genau übereinander zu legen. Ein Ausweg bietet die im obigen Skript auskommentierte Möglichkeit, Vorder- und Hintergrundbild jeweils wechselseitig auszuschalten. Bei dem Befehl hide bg picture verschwindet dann aber auch der Zeichenblock. Entweder Sie verzichten ganz auf ihn oder sie kopieren ihn auch auf das Vordergrundbild. Dann müssen Sie aber darauf auchten, daß beide Bilder genau zur Deckung kommen. Alle Texte, die im Vorder- wie im Hintergrund sichtbar sein sollen, sollten als Textfelder realisiert werden (in unserem Beispiel die Überschrift "Mini-Anatomie"), die anderen Texte müssen aus praktischen Gründen ausnahmsweise mit dem Text-Tool des Paint Mode geschrieben werden. (Zwar können, wie wir in einer der vorherigen Folgen gesehen haben, auch Textfelder mit show oder hide gezeigt resp. verborgen werden, jedoch ist es in diesem Fall problematisch, bei jedem Umschalten eine größere Anzahl von Textfeldern ein- bzw. auszuschalten.) Ansonsten liebe Leserin, lieber Leser, nehmen Sie ein Lehrbuch der Anatomie zur Hand (vgl. Literaturhinweise). Ihrem Tatendrang steht nichts im Wege. Das Bill-O-MeterDie Möglichkeiten der Button-Animation können natürlich auch kombiniert werden. Auf unserer nächsten Karte, die wir wieder mit "New Background" anlegen, werden wir einen Button gleichzeitig bewegen und animieren: Dazu gehen wir erst einmal in den Icon Editor und modifizieren das Icon "Bill" wie in folgendem Bild (Bild 5):
Bild 5: Bill lacht, ist ernst und ist sauer
Bild 6: Das Bill-O-Meter
Dies ist alles, was Sie wissen müssen, um das Listing zu verstehen. Das Bill-O-Meter ist die einfachste Form eines zweidimensionalen Random-Walks, der in der Simulation eine bedeutende Rolle spielt. Hier simuliert Bill das Gamblers Ruin Problem. Die Idee dazu fand ich in Varian (Ed.): Economic and Financial Modeling with Mathematica, New York 1993. Hier findet die Leserin oder der Leser weitere Anregungen, wie das Problem behandelt und programmiert werden kann. Rekursion und "Die Türme von Hanoi"Einem Bonmot aus Dal Cin/Lutz/Risse (Programmieren in Modula-2, Stuttgart 1989) zufolge, ist ein Programmierkurs ohne "Die Türme von Hanoi" genauso unvollständig wie ein Mathematikbuch ohne das "Zornsche Lemma". Für die Wenigen, die die Türme von Hanoi noch nicht kennen, hier erst einmal die Geschichte:In Hanoi steht ein Tempel des Brahma, in dem fleißige Mönche 64 schwere Metallscheiben von einem Stapel auf einen anderen schichten. Die Scheiben sind so schwer, daß immer nur eine einzige bewegt werden kann. Die Mönche benutzen drei Stapel, einen Start-, einen Hilfs- und einen Zielstapel und die strenge Regel des Brahma besagt, daß niemals eine größere Scheibe auf einer kleineren liegen darf. Die Legende berichtet, daß an dem Tag, an dem es den Mönchen gelungen ist, alle Scheiben in der richtigen Reihenfolge auf den Zielstapel zu legen, das Ende der Welt gekommen sei. Da ich nicht an dem Ende der Welt schuld sein will, ist mein Turm von Hanoi kleiner, er hat nur fünf Scheiben:
Bild 7: Die Türme von Hanoi
Der Grund für die Beliebtheit der Türme von Hanoi in Programmierlehrbüchern ist der, daß sie sich leicht rekursiv programmieren lassen. Als Beispiel für eine Rekursion mag die bekannte Camenbertschachtel mit dem Rotkäppchen auf dem Etikett dienen: Rotkäppchen trägt einen Korb, auf dem eine Camenbertschachtel mit Rotkäppchen und einem Korb mit einer Camenbertschachtel abgebildet ist. Auf dieser Camenbertschachtel ist wiederum Rotkäppchen mit einem Korb und einer Camenbertschachtel abgebildet, auf der Rotkäppchen einen Korb mit einer Camenbertschachtel trägt... Lassen wir das, an dieser Stelle bricht die Rekursion aus drucktechnischen Gründen (so kleine Rotkäppchen können nicht mehr gedruckt werden) ab. Die Rekursion bei den Türmen von Hanoi geht davon aus, das es offensichtlich recht einfach ist, einen Stapel mit nur zwei Scheiben korrekt zu bewegen: Die obere kleinere Scheibe wird vom Startstapel auf den Hilfsstapel gelegt. Dann wird die untere größere Scheibe vom Startstapel auf den Zielstapel geschoben und dann die kleinere Scheibe vom Hilfsstapel auf den Startstapel. Alles klar? Rekursiv gedacht bedeutet das, daß die Prozedur Hanoi solange mit einer kleineren Anzahl von Scheiben erledigt wird, bis dieser einfache Fall eintritt. In der Notation von HyperTalk sieht das so aus:
on hanoi hoehe, start, ziel, hilf if hoehe = 0 then exit hanoi end if hanoi hoehe-1, start, hilf, ziel verlegeScheibe hoehe, start, ziel hanoi hoehe-1, hilf, ziel, start end hanoiDas Handle hanoi ruft sich von innen immer wieder selber auf, solange bis die Anzahl der Scheiben (hoehe) gleich Null ist. Das ist das ganze Geheimnis der Rekursion. Bei Hofstadter (Metamagicum, Stuttgart 1991) finden Sie eine witzige, in LISP programmierte Lösung, die als Vorbild für obiges HyperTalk-Fragment gedient hat. Hofstadters "LISP-Genie" druckte jedoch nur "rm", "ml" etc. für "rechts nach mitte", "mitte nach links" aus; HyperCard jedoch kann Animationen und Grafik, daher ist das Handle verlegeScheibe in unserem Beispiel recht aufwendig gestaltet. Erst einmal müssen wir die notwendigen Koordinaten bestimmen: Der Fußpunkt des Startstapels liegt bei (100, 250), der des Hilfsstapels bei (250, 250) und der des Zielstapels bei (400, 250). Die Karte selber können wir diesmal mit "New Card" anlegen, der Hintergrund ist mit dem Bill-O-Meter identisch. Die Stapel habe ich dann gezeichnet, indem ich das Line Tool ausgewählt und die entsprechenden HyperTalk-Befehlen in der Messagebox abgesetzt habe: drag from 100, 250 to 100, 200zeichnete so die Senkrechte des Startstapels. Die anderen Linien wurden ähnlich erstellt. Die Koordinaten wurden als "Funktionskonstanten" im Karten-Skript hinterlegt, damit die Handle beider Buttons darauf zugreifen können. Als nächstes wurden die Scheiben als Vordergrund-Buttons realisiert. Wichtig für unser Skript ist dabei, darauf zu achten, daß die kleinste Scheibe die Nummer 1, die nächstgrößere die Nummer 2 usw. bis zur größten Scheibe, die die Nummer 5 bekommt. Die Animation wird ebenfalls mit dem drag-Befehl realisiert. Mit dem Befehl set dragspeed to 100wird eine gleichmäßige Bewegung garantiert. Die Animation verläuft also nicht so ruckartig, wie bei dem Beispiel auf unserer ersten Karte. Der Nachteil ist allerdings, daß zum Ziehen der Buttons das Button Tool ausgewählt sein muß. Unsere Hintergrundknöpfe auf der Karte bekommen dadurch während der Animation einen Rahmen. Außerdem wird jedesmal abgefragt, wieviel Scheiben schon auf dem jeweiligen Stapel liegen und dies im Container stapel festgehalten. Mit bottomLine() - 24*stapel - 13wird dann die Stapelhöhe bestimmt. 24 ist dabei die Höhe meiner Scheiben, 13 (fast) die Hälfte davon. Diese Werte müssen Sie gegebenenfalls abändern. Der Button "Initialize" sorgt nur dafür, daß alle Scheiben wieder auf den Zielstapel abgelegt werden und ist vor jedem Start zu betätigen, da in dieser Version nicht nachgeprüft wird, ob die Scheiben zu Beginn auf dem Startstapel liegen. Diese einfache Erweiterung sei dem Leser zur Übung hinterlassen. (Hinweis: mit the loc of cd button <Nr> kann die Position jeder Scheibe abgefragt werden.) Ansonsten kann das Programm sehr leicht auf eine größere Anzahl von Scheiben erweitert werden. Nur denken Sie bitte daran: Wenn 64 Scheiben vom Startstapel auf den Zielstapel gelegt worden sind, ist das Ende der Welt erreicht. Und möchten Sie daran Schuld sein ... ? Wie weiter?Natürlich wünscht man sich manchmal ausgefeiltere Animationen, als sie mit den Mitteln von HyperTalk möglich sind. Hier gibt es zwei Lösungen. Zum ersten gehört zum Lieferumfang von HyperCard ein Set von externen Funktionen (Quick Time Tools) mit dem es möglich ist, Quick Time Filme in HyperCard abzuspielen. Zum anderen wurde bisher mit HyperCard 2.3 das Programm AddMotion ausgeliefert, das es erlaubt, interaktiv sehr komplexe Animationen und Zeichentrickfilme zu erstellen, die ebenfalls in HyperCard abgespielt werden können. Damit bleiben dann dem Multimedia-Begeisterten keine Wünsche mehr offen.
LiteraturH.J. von Brandis: Anatomie und Physiologie für Schwestern und ärztliche Mitarbeiter, Stuttgart (Gustav Fischer Verlag) 5. Auflage 1977Georg Colourus, Harold Thimbleby: HyperProgramming. Building interactive programs with HyperCard, Wokingham (Addison-Wesley) 1992 Dal Cin/Lutz/Risse: Programmieren in Modula-2. Eine Einführung in das modulare Programmieren mit Anwendungsbeispielen unter UNIX, MS-DOS und TOS, Stuttgart (Teubner) 4. Auflage 1989 Adolf Faller: Der Körper des Menschen, Stuttgart (Thieme) 7. Auflage 1976 Peter A. Gloor: Hypermedia-Anwendungsentwicklung. Eine Einführung mit HyperCard-Beispielen, Stuttgart (Teubner) 1990 Douglas R. Hofstadter: Metamagicum. Fragen nach der Essenz von Geist und Struktur, Stuttgart (Klett-Cotta) 1991 Hal R. Varian (Ed.): Economic and Financial Modeling with Mathematica, New York (Telos/Springer) 1993 |
|||||
© 1996 - 2001 by Jörg Kantel Last modified: JK, 04.09.2001; 20:33:29 Uhr email:joerg@kantel.de |