Fachbereich Mathematik und Informatik Softwareprojekt: Spieleprogrammierung Einführung in ActionScript Do, Hoang Viet(do@mi.fu-berlin.de) Freie Universität Berlin, SoSe 2012
Agenda Allgemeine Einführung Eigenschaften von ActionScript Flash Anwendung erstellen Besonderheiten von ActionScript gegenüber Java Tutorial: Einführung in die Spieleentwicklung http://gingermagicgames.com/?p=87 Bunte Bilder, Tolle SFX, Hexerei ähnliche Animation UND VIELES MEHR! Literatur: Programming in Adobe ActionScript 3.0 online verfügbar http://help.adobe.com/en_us/actionscript/3.0_programmingas3/ Deutsche Version liegt auch vor: http://help.adobe.com/de_de/actionscript/3.0_programmingas3/ 2
Eigenschaften von ActionScript Auf Basis von Javascript (ECMA 262) Case Sensitive A ist nicht dasselbe wie a Objekt orientierte Programmiersprache Klassen, Methoden, Eigentschaften Dynamische Typisierung Pseudostatische Typisierung möglich Semikolon ist optional Bei uns bitte mit als Coorperate Style 3
Eine Flash Anwendung erstellen ActionScript Reine ActionScript ActionScript und MXML Über MXML wird die UI definiert Mischcode aus MXML und Actionsckript in einer Datei ActionScript und Flash Innerhalb von Flash werden die Symbole ( MovieClips ) erstellt Symbole sind mit Klassen in ActionScript gekoppelt 4
Demo: HelloWorld 5
Typen Kovention: lowercamelcase Einfache Datentypen (engl. simple datatype) string, uint (32 bit), int (32 bit), Number (64 bit), Boolean Achtung: Im Handbuch steht In ActionScript 3.0, all arguments are passed by reference, because all values are stored as objects Das ist nicht wahr! Operatoren Strenge Un-/Gleichheit: a === b oder a!== b Wert und Typ Keine implizite Typkonvertierung Volle Liste: Programming Adobe ActionScript 3.0, Page 69 6
Typen Eigenschaften (engl. Properties) Syntax: [modifier]var <ident>[:type] [= <value>]; Auch die Klassen haben Modifier: public, internal (default), dynamic, final Vererbung, Interfaces, Überschreiben von Methoden Java-like (extends, override, final) Pseudo Enumeration durch final Klassen 7
Methoden 1 Methoden (engl. Methods) Syntax: [modifier]function <ident>([p1:type[,p2:type[ ]]]) [: type] { /* */ } Beispiel: function eventresponse(eventobject:eventtype) { /* */} Funktionsparameter Standardparameter möglich Variable Parameterzahl möglich Array arguments im Funktionsrumpf nutzen Oder über vor dem letzten Parameter (ab ActionScript 3) Getter und Setter Getter-Syntax: [accessor]function get <name>():<type> {} Setter-Syntax: [accessor]function set <name>(<p>:<type>):void {} Funktionssignatur ist fest. 8
Methoden 2 Überladen von Methoden ist nicht möglich Gebundene Methoden Funktion, die eine Funktion zurückliefert Weitere Punkte: Instanzmethoden Statische Methoden Konstruktoren 9
Array Indizierte oder/und Assoziative Untypisiert Strikte Typisierung (AS3): Vector.<Type> (Type ersetzen) Als Key ist alles möglich: Number, Strings, Objekte Mischung erlaubt Indizierung von 0; Keine kontinuierliche Zählung nötig Beispiel: A[0] = 1; A[10] = 10; Demo: e002_arrays.as Ablaufsteuerungen for in Iteriert den Key for each in Iteriert den Value Demo: e003_iterations.as 10
Mehrdimensionale Arrays var mm:array = new Array(); mm[0] = new Array(); mm[0][0] = 100; mm[1][0] = 12; // Error trace(mm[0][0]); 11
Mehrdimensionale Arrays var mastertasklist:object = new Object(); mastertasklist["monday"] = ["wash dishes", "trash"]; mastertasklist["tuesday"] = ["wash dishes", "pay bills"]; mastertasklist["wednesday"]= ["wash dishes", "dentist"]; mastertasklist["thursday"] = ["wash dishes"]; mastertasklist["friday"] = ["wash dishes", "clean house"]; mastertasklist["saturday"] = ["wash dishes", "wash car"]; mastertasklist["sunday"] = ["mow lawn", "fix chair"]; trace(mastertasklist.wednesday[1]); trace(mastertasklist.sunday[0]); // output: dentist // output: mow lawn Quelle: Beispiel von Adobe Handbuch 12
Anmerkungen Kommentare Zeilenkommentare, Blockkommentare ASDoc wie JavaDoc http://help.adobe.com/en_us/flex/using/wsd0ded3821e0d52fe1e63e3d11c2f44bb7 b-7fe7.html Fehlerbehandlung durch Exception (try catch finally) und Events Programming in Adobe ActionScript 3.0, Seite 195 ff. Leere Catch Block ist nicht erlaubt Mutterklasse: Error Package statt Namespaces! eigene Zugriffsmodifier Nicht verwechseln mit Namespace aus C# Programming Adobe ActionScript 3.0, Seite 42 ff. 13
Tutorial 14
Grundlagen der Spieleprogrammierung Gameloop Eine unendliche Schleife, die kontinuierlich eine Update- und Draw-Operation ausführt. Frames Eine Iteration der Gameloop Maximale Framerate ist in Flash einstellbar! Assets Audio-visuellen Elemente eines Spiels ContentLoader Die Komponente, die für das Laden der Assets zuständig ist. 15
Weitere Sprachelemente Funktionspointer Es existiert der Typ Function Hinweis: <ident>.length Klassenpointer Es existert der Typ Class Reflection Anweisungen an den Compiler Beispiel: [embed(source= img/player.png )] private var Player : Class; 16
Hinweise zum Tutorial Link auf dem Homepage Namespace s (spark) statt mx (halo/mx) nutzen <s:group> statt <mx:canvas> Abgabe: Fertige Spiel vorzeigen Wer fertig ist kann gehen 17 Uhr ist Schluss. 17