Archiv für Dezember 2005

Sonntag, 04.12.2005

meineFreundin:Freundin = new Freundin;

Gestern war ich mal wieder zu Besuch in der SAE: Die Alumni lud zu einem Workshop ein: Matthias referierte zum Thema »Advanced Flash«. Auf dem Programm standen eine Vielzahl kleiner Tipps sowie eine Einführung in OOP und Actionscript 2. Die Agenda:

- Flash Performance
- Flash Tips und Tricks
- Actionscript Code Design
- OOP
- Actionscript 2.0
- Flash 8… what’s geil
- Komponentenerstellung

Nach dem Einstieg mit Performance-Tipps ging es um externe Events in Frame-Scripts. Zu Zeiten von Flash 5 war es üblich, Code auf die MovieClips selbst zu programmieren: Das war quasi objektorientiert und es war recht einfach – außer, wenn man sich in fremdem Code zurechtfinden musste.
Seit Flash 6 ist es Usus, möglichst nichts auf MCs zu schreiben und stattdessen Framescripts zu verwenden. Mit Flash 7 und Actionscript 2 nähert man sich wieder etwas der alten Flash-5-Arbeitsweise an (stark vereinfacht gesagt).

Nächster Halt: Time-based Animation. Das Problem: Auf langsamen Rechnern wird ein Spiel nicht mit 20 fps angezeigt, sondern vielleicht nur mit 10 fps. Wenn alles in Zeitlupe läuft, ist es für Leute mit älteren Rechnern leicht, jede Highscore zu knacken. Die Lösung: Frame-unabhängiges Arbeiten mit setInterval().
Damit dauert eine Animation – beispielsweise ein Raumschiff, das von oben nach unten über die Bühne fährt – auf jedem Rechner gleich lange. Auf einem langsamen PC wird die Position aber nicht unbedingt 20x pro Sekunde neu gezeichnet, sondern vielleicht nur fünfmal. Die Bewegungen sehen etwas abgehackter aus, Besitzer älterer Rechner haben jedoch keinen Vorteil mehr.

Prototyping erklärte uns Matthias zwar schon im CMD-Unterricht (1, 2), eine Wiederholung tat allerdings ganz gut. Mit Prototyping können neue Eigenschaften an Klassen angehängt werden. Man spart sich viel Schreibarbeit, wenn man etwas immer wieder braucht, beispielsweise Fade-In/Fade-Out, flipH/flipV wie in Lingo/Director oder ein Wobbel-Effekt. Ein anderes Beispiel: Die String-Klasse um Suchen/Ersetzen erweitern:

String.prototype.replace = function(rep_string, new_string) { return this.split(rep_string).join(new_string); }; test = "Hallo, hier werden die Spaces durch '_' erstezt!"; ergebnis = test.replace(" ", "_"); trace(ergebnis);

Etwas fortgeschrittener wurde es dann mit try, throw, catch und finally. Falls ein Fehler auftritt, kann Flash versuchen, ihn mit catch abzufangen. Wenn alles nichts hilft, tritt finally auf den Plan, das immer ausgeführt wird.

Wie gemacht für die Steuerungen von Spielen sind die Listener. Wenn man zum Beispiel mehrere enterFrames auf einem Movieclip braucht gibt’s ein Problem:

_root.onMouseDown = function() { trace("Ereignismethode A"); }; // Definition der Ereignismethode B überschreibt Ereignismethode A this.onMouseDown = function() { trace("Ereignismethode B"); };

Indem man alle Events in ein Objekt packt und dieses mit addListener an die Maus hängt, lässt sich dieses Problem umgehen:

meineInstanzA = new Object(); meineInstanzA.onMouseDown = function() { trace("Listener A"); }; Mouse.addListener(meineInstanzA); // meineInstanzB = new Object(); meineInstanzB.onMouseDown = function() { trace("Listener B"); }; Mouse.addListener(meineInstanzB);

In die gleiche Kerbe schlägt AsBroadcaster. Mit AsBroadcaster kann ein addListener als Methode auch an eigene Objekte gehängt werden. Auch das ist wieder gut für Spiele geeignet (»Man muss dem Raumschiff nur sagen “explode” und dann explodiert es, ohne For-Schleifen für Schüsse und ohne Flags.«).
Auch schön: AsBroadcaster ist pfadunabhängig. Ein Objekt kann auch mehreren anderen zuhören. Beispiel:

sonja = new Object(); AsBroadcaster.initialize(sonja); sonja.sageFuellsatz = function(neuigkeit) { this.broadcastMessage("onTratsch", neuigkeit); }; alex = new Object(); alex.onTratsch = function(sonjasNeuigkeit) { trace(sonjasNeuigkeit); }; // sonja.addListener(alex); sonja.sageFuellsatz("Ich muss unbedingt mal wieder Sport machen!")

Es folgte wieder eine Reihe kleiner Tipps: MCs mit swapDepths() und anschließendem removeMovieClip() löschen, indem man sie in den positiven Zahlenbereich der Tiefenebenen legt, bzw. vor dem Löschen schützen, indem sie in den negativen Bereich geschoben werden. In diesem Zusammenhang: getNextHighestDepth(). Modulo zur Winkelbeschränkung, für Koordinaten oder um Matrizen zu erstellen. Pseudophysik (realistisches Bouncen eines Balls, ohne mit Sinus/Cosinus hantieren zu müssen). Undokumentiertes Actionscript.

Nach der Pizza zum Mittagessen ging es in die Vollen: Objektorientierte Programmierung (OOP) mit Actionscript 1 und AS2. Um objektorientiert programmieren zu können, ist kein AS2 notwendig – aber es vereinfacht die Sache ungemein. Matthias zeigte uns OOP zunächst mit AS1, damit danach der Unterschied deutlich wird.
AS2 wird in externe Textdateien geschrieben, die beim Erstellen des SWF in dieses mit hinein kompiliert werden. Neu für uns: Variablen müssen nicht nur deklariert, sondern auch typisiert werden. Alle Erkenntnisse aufzuführen, würde an dieser Stelle etwas zu weit führen. Wir haben auch noch die Themen public/private Variablen und Vererbung angeschnitten und uns mit der Konstruktor-Funktion befasst (eine Art onLoad für Klassen).
Vorteile von AS2:

  • Beim OOP ist die Vererbung wesentlich einfacher als in AS1.
  • Typisierungsfehler fallen weg, da man darauf gleich beim Kompilieren im Output-Fenster aufmerksam gemacht wird.
  • Die Art zu programmieren ist einfacher, da sie sehr der Arbeitsweise von Flash 5 ähnelt (damals schrieb man alle Actions auf die entsprechenden MCs, heute schreibt man alle Funktionen in die entsprechenden Klassen und jede Klasse ist eine .as-Datei auf der Festplatte).

Anschließend ging es darum, MovieClips in Verbindung mit Klassen zu bringen. Als Schmankerl zum Schluss zeigte uns Matthias noch die wichtigsten Neuerungen von Flash 8 und wie man einige der Filter anwendet.
Nach fast 8 Stunden war es dann genug; mehr ging nicht mehr in den Kopf rein.   :-)

Erschienen am Sonntag, 04.12.2005 @ 12:20 | Kommentare deaktiviert
Tags:

 

Mittwoch, 07.12.2005

Arcade-Shooter im Eigenbau

Seit heute am Kiosk: Das MX-Magazin 11/2005 mit dem zweiten Artikel von mir: »Arcade-Shooter im Eigenbau«, ab Seite 27.

»Sie haben mal wieder Lust auf eine gepflegte Partie Actionshooter, aber gerade keinen der Klassiker zur Hand? Macht nichts: In diesem Workshop zeigen wir Ihnen, wie Sie sich Ihr eigenes Ballerspiel bauen.«

Erschienen am Mittwoch, 07.12.2005 @ 15:14 | Kommentare deaktiviert
Tags: ,

 

Donnerstag, 08.12.2005

Terkel in Trouble

Gestern in der Erlanger Sneak: »Terkel in Trouble«, ein dänischer Animationsfilm (IMDB, Infos und Trailer beim deutschen Verleih). Kleine Besonderheit: Sämtliche Stimmen im Film werden von Ärzte-Sänger Bela B. gesprochen.
Worum geht’s? Der 13-jährige Terkel hat’s nicht leicht: Seine Mutter raucht wie ein Schlot, sein Vater kennt nur ein Wort (»Nein«), seine Schwester nervt und in der Schule wird er gemobbt – bis hin zu Morddrohungen. Als seinetwegen auch noch eine Klassenkameradin aus dem Fenster springt, geraten die Dinge etwas außer Kontrolle…

Das Sneak-Publikum vergab im Schnitt magere 2 von 5 Sternen – einer hat im Feedback-Bogen sogar geschrieben: »Ich bin gegangen! Und ich habe sogar “Clever & Smart” ganz angesehen.«
Ich selbst fand »Terkel in Trouble« dagegen klasse: Eine der seltenen Perlen in der Sneak Preview! Zugegeben, es geht etwas blutig zu, aber das darf man nicht zu ernst nehmen. Durch den schwarzen Humor sollte klar werden, dass der Film stark überzeichnet.
Bernhard und ich haben uns jedenfalls prächtig amüsiert! Fans von »South Park« oder den Happy Tree Friends werden ab 22. Dezember auf ihre Kosten kommen.

Szene aus 'Terkel in Trouble' von Kresten Vestbjerg Andersen

Erschienen am Donnerstag, 08.12.2005 @ 13:00 | Kommentare deaktiviert
Tags: ,

 

+++

Archiv
RSS-Feeds: Einträge und Kommentare (zu allen Einträgen).