Montag, 26.04.2004
»Gemütlich ‘n paar Objekte«
Heute Morgen bin ich mal wieder mit dem Rad in die Stadt gefahren, ehe es mit dem Zug nach München zur SAE weiter ging. T-Shirt unter der Übergangsjacke; war mit 5 Grad zwar recht frisch, aber mit dünnen Lederhandschuhen und Gore-Ärmlingen ging’s eigentlich.Der erste von zwei Tagen in der fünften und letzten Woche des Flash-Unterrichts bei Matthias. Jetzt kommt nichts prüfungsrelevantes mehr, dafür lauter cooles Zeug!
Wir sahen uns ein paar Objekte an, zum Beispiel das Color-Objekt. Auf zwei Arten (setRGB und setTransform) kann man per ActionScript Dinge auf der Bühne einfärben. setTransform ist dabei besonders interessant, da es Duotone ermöglicht und die »Oberflächenstruktur« des einzufärbenden Symbols erhält. Matthias zeigte uns ein älteres Projekt, in dem es neun Quiz-Spiele gibt (ein Symbol in Flash ist ein MovieClip oder Button). Die unterschiedlichen Farben (und die Fragen und Antworten) kamen aus einem XML-File.
Bei der Gelegenheit kurz das random()-Objekt, danach das Mouse-Objekt. Mittels Mouse.hide kann der Cursor des Benutzers versteckt werden, um ihm einen eigenen Cursor zu geben, zum Beispiel ein Fadenkreuz in einem Egoshooter oder einen besonderen Pfeil- oder Handcursor.
Der Hammer schlechthin ist jedoch die Drawing-API, die es ab Flash MX gibt. Vereinfacht gesagt: Ich kann per AS Dinge auf die Bühne zeichnen. Die Bühne im Open-File ist komplett leer, es gibt nur ein Script, das hierfür sorgt:
Ist jetzt nur eine Spielerei zur Veranschaulichung, aber es gibt unendliche Möglichkeiten!
Wir sahen uns auch noch an, wie man aus dem Nichts einen MovieClip erzeugt (_root.createEmptyMovieClip), und wie innerhalb von z.B. Event-Handlern with eingesetzt wird, um sich ein bisschen Tipparbeit bzw. Copy/Paste zu sparen.
Hier ein paar abgefahrene Beispiele für den Einsatz der Drawing-API, von Matthias:
- http://www.gameworker.de/matthias/curve3.html
- http://www.gameworker.de/matthias/drawing.htm
- http://www.gameworker.de/matthias/drawing2.html
- http://www.gameworker.de/matthias/navi.html
- http://www.gameworker.de/matthias/navi_7.html
Richtig Hardcore wird’s bei den Sachen auf polyaktiv.de, der anscheinend »Flash MX Game Design Demystified« cover to cover durchgearbeitet hat und wohl sonst keine Freunde hat. :-)
Auf polyaktiv.de anschauen: 3D-Pinman, 3D-Flugzeug, 3D-Wände 2, 3D-Park, Iso-Infected. Ich sag’s nochmal: In den Open-Files ist die Bühne komplett leer! Alles nur AS-Code.
Weitere Beispiele für die Drawing-API gibt es auf Matthias’ und Andis Gameworker-Seite unter »Guiding, Tutorials, Drawing API«. Dort »magic cube« und »drawing board«.
Die Gameworker haben es mal auf die Spitze getrieben und festgestellt, dass die Drawing-API sehr viel performanter ist als die MovieClip-Technik (in etwa doppelt so schnell).
+++
Nächstes Thema nach der Drawing-API: Eine andere Möglichkeit, mit Event-Handlern zu arbeiten. Normalerweise schreibt man auf einen MovieClip eine Action wie folgt:
onClipEvent(enterFrame) {
[Actions]
}
Alternativ kann man sämtliche Actions in den Frame eines separaten Layers packen und folgendes schreiben:
my_movieclip.onEnterFrame = function() {
[Actions]
};
Vorteil: Der AS-Code ist nicht über tausend MovieClips, Buttons und Frames verstreut, sondern befindet sich an einem Ort. Diese Arbeitsweise eignet sich auch gut, um mit mehreren Leuten im Team am Code zu arbeiten.
Ein weiterer Pluspunkt: Dadurch, dass man Events von außen auf Symbole setzen kann, kann man sie erst dann drauf packen, wenn sie gebraucht werden. Das spart Performance und unzählige Flag-Variablen. Wenn man den Event-Handler nicht mehr braucht, schreibt man:
delete.my_movieclip.onEnterFrame;
+++
Letzter Akt: Prototyping. Es gibt ein Rudel Methoden und Properties für MovieClips, aber es gibt leider nicht alles, was das Herz begehrt. Kein Problem: Man kann sich einfach seine eigenen Methoden und Properties schreiben!
Etwas, was man zum Beispiel immer wieder braucht, ist diese Zeile hier:
if (this.hitTest(_root._xmouse,_root._ymouse,true))
Die Abfrage prüft, ob man sich mit der Maus über einem Symbol befindet. Man braucht es immer wieder, und es nervt! :-)
Abhilfe: Einmal eine eigene Property »mouseHit« in einem Actions-Layer basteln:
MovieClip.prototype.mouseHit = function() {
if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
return true;
} else {
return false;
}
};
Zum Einsatz kommt die hausgemachte Property wie folgt:
if (mouseHit())
Schon ein bisschen kürzer!
Man kann Prototyping für alles mögliche einsetzen. Matthias und Andi haben sich zum Beispiel Code-Schnipsel zum Ein- und Ausfaden (»fadeTo«) und zum Wobbeln (»wobbl«) gebastelt. Um etwas wobbeln zu lassen, genügt fortan nur noch eine Zeile mit drei Parametern. Coole Sache!
Tutorials auf der Gameworker-Seite (»Guiding, Tutorials, Prototype«).
Erschienen am Montag, 26.04.2004 @ 19:38
| Kommentare deaktiviert
Tags: flash, SAE
