View
2
Download
0
Category
Preview:
Citation preview
Nick Weschkalnies, Sven Gasser
Adobe Flash CS5
Das umfassende Handbuch
Auf einen Blick | 3
AU
F E
INE
N B
LIC
K
Vorwort ............................................................21
Teil I Grundlagen ......................................................27
1 Was ist Flash? .............................................292 Arbeitsumgebung ........................................45
Teil II Anwendung ......................................................67
3 Zeichnen .....................................................694 Symbole, Instanzen und die Bibliothek ......1275 Animation .................................................1496 Text ..........................................................2437 Veröffentlichung .......................................285
Teil III ActionScript ...................................................325
8 ActionScript-Grundlagen ...........................3279 Animation mit ActionScript .......................39710 Einführung in die objekt orientierte Programmierung .......................................44511 Zeichnungs-API .........................................47912 Komponenten ...........................................497
Teil IV Multimedia und dynamische Inhalte ............517
13 Bitmaps ....................................................51914 Sound .......................................................54515 Video ........................................................58116 Dynamischer Text ......................................61517 Flash, PHP und MySQL .............................66718 XML..........................................................72719 FileReference ............................................757
Teil V Weitere Einsatzgebiete .................................783
20 Spieleprogrammierung ..............................78521 Ein Blick über den Tellerrand .....................833
Teil VI Anhang ...........................................................851
A FAQ ..........................................................853B Key-Codes der Key-Klasse .........................865C Unicode (Lateinisch einfach) .....................869D URL-Kodierung .........................................873E Die DVD zum Buch ...................................875
Auf einen Blick
4 | Inhalt
Vorwort ................................................................................. 21
Teil I Grundlagen
1 Was ist Flash? .......................................................... 291.1 Flash-Historie ............................................................. 291.2 Entwicklungsumgebung, Player und Projektor ............ 291.3 Vektoren und Pixel ..................................................... 311.4 Anwendungsbereiche ................................................. 321.5 Neues in Flash CS5 ..................................................... 37
2 Arbeitsumgebung ..................................................... 452.1 Begrüßungsbildschirm ................................................ 452.2 Die Entwicklungsumgebung ....................................... 462.3 Die Menüleiste ........................................................... 472.4 Die Werkzeugleiste..................................................... 512.5 Die Zeitleiste .............................................................. 542.6 Die Bühne .................................................................. 552.7 Entwicklungsumgebung anpassen ............................... 572.8 Tastaturkurzbefehle .................................................... 63
Teil II Anwendung
3 Zeichnen ................................................................... 693.1 Zeichenmodi .............................................................. 693.2 Zeichenwerkzeuge ...................................................... 70
3.2.1 Strich- und Füllfarbe ....................................... 703.2.2 Farbpalette bearbeiten ................................... 723.2.3 Kuler-Bedienfeld ............................................ 733.2.4 Linienwerkzeug .............................................. 743.2.5 Eigenschaften ändern ..................................... 753.2.6 Stricheigenschaften ........................................ 753.2.7 Freihandwerkzeug .......................................... 783.2.8 Pinsel-Werkzeug ............................................. 793.2.9 Sprühen-Werkzeug ......................................... 813.2.10 Deko-Werkzeug ............................................. 833.2.11 Radiergummiwerkzeug ................................... 933.2.12 Rechteckwerkzeug.......................................... 953.2.13 Werkzeug für Rechteckgrundform .................. 96
Inhalt
Inhalt | 5
INH
ALT
3.2.14 Ellipsenwerkzeug ............................................ 973.2.15 Werkzeug für Ellipsengrundform .................... 983.2.16 Polysternwerkzeug ......................................... 993.2.17 Stiftwerkzeug ............................................... 100
3.3 Objekte auswählen und bearbeiten .......................... 1023.3.1 Auswahlwerkzeug ........................................ 1023.3.2 Unterauswahl-Werkzeug .............................. 1033.3.3 Lassowerkzeug ............................................. 104
3.4 Transformationen ..................................................... 1073.4.1 Frei-transformieren-Werkzeug ...................... 1083.4.2 3D-Drehungswerkzeug ................................. 1093.4.3 3D-Versetzungswerkzeug .............................. 1103.4.4 Fluchtpunkt und Perspektive ........................ 111
3.5 Farben und Farbverläufe erstellen ............................. 1133.5.1 Tintenfass- und Farbeimerwerkzeug .............. 1133.5.2 Pipette ......................................................... 1143.5.3 Farbverläufe ................................................. 1153.5.4 Bitmap-Füllung ............................................ 1163.5.5 Farbverlaufwerkzeug .................................... 117
3.6 Hilfswerkzeuge ......................................................... 1183.6.1 Skalierung mit dem 9-teiligen Segmentraster ...1183.6.2 Objekte gruppieren und anordnen ............... 1203.6.3 Handwerkzeug ............................................. 1213.6.4 Zoomwerkzeug ............................................ 1223.6.5 Lineale ......................................................... 1223.6.6 Hilfslinien ..................................................... 1233.6.7 Raster........................................................... 125
4 Symbole, Instanzen und die Bibliothek .................. 1274.1 Symbole ................................................................... 1274.2 Symbole erstellen ..................................................... 1284.3 Symbolinstanzen ...................................................... 1304.4 Schaltflächen ............................................................ 1364.5 Bibliothek ................................................................. 141
4.5.1 Bibliothekselemente löschen ........................ 1424.5.2 Ordnung und Struktur in der Bibliothek ........ 142
4.6 Gemeinsam genutzte Bibliothek (Shared Library) ...... 144
5 Animation ............................................................... 1495.1 Zeitleiste .................................................................. 149
5.1.1 Ebenenmodell .............................................. 1505.1.2 Mit Ebenen arbeiten..................................... 1505.1.3 Bilder und Schlüsselbilder auf der Zeitleiste ...1555.1.4 Darstellungsoptionen der Zeitleiste ............... 157
6 | Inhalt
5.1.5 Szenen und Bildbezeichner ........................... 1585.2 Bild-für-Bild-Animation ............................................ 1605.3 Zwiebelschaleneffekt ................................................ 1705.4 Tweens ..................................................................... 172
5.4.1 Bewegungs-Tween erstellen .......................... 1725.4.2 Eigenschaften animieren ............................... 1735.4.3 Pfad eines Bewegungs-Tween ....................... 1785.4.4 Bewegungs-Editor ........................................ 1845.4.5 Bewegungsvoreinstellungen ......................... 1955.4.6 Animation kopieren und einfügen ................ 196
5.5 Klassische Tweens ..................................................... 1975.5.1 Klassische Tweens an Pfad ausrichten ........... 1985.5.2 Timing .......................................................... 202
5.6 Weitere Eigenschaften animieren .............................. 2095.7 Form-Tweens ............................................................ 212
5.7.1 Bitmaps in Vektoren umwandeln .................. 2125.7.2 Formmarken einsetzen ................................. 216
5.8 Masken .................................................................... 2185.9 Verschachtelung ....................................................... 2245.10 Inverse Kinematik ..................................................... 230
5.10.1 Bone-Werkzeug ............................................ 2315.10.2 Bindungswerkzeug ....................................... 2405.10.3 Steuerungspunkte ausrichten ........................ 242
6 Text ......................................................................... 2436.1 Klassische Texterstellung in Flash .............................. 243
6.1.1 Textbreite anpassen ...................................... 2446.1.2 Text transformieren ...................................... 245
6.2 Textfeld-Eigenschaften .............................................. 2466.2.1 Textfeld-Typen .............................................. 2466.2.2 Text formatieren ........................................... 2476.2.3 Schriftart, -größe und -farbe ......................... 2486.2.4 Auszeichnungen ........................................... 2496.2.5 Ausrichtung .................................................. 2516.2.6 Zeilenabstand, Zeilenlänge, Zeichenabstand ...2526.2.7 Textrichtung ................................................. 2546.2.8 Text mit URL verknüpfen .............................. 2546.2.9 Auswählbarer Text ........................................ 256
6.3 Darstellung von Schrift ............................................. 2566.3.1 Geräteschriftarten ........................................ 2586.3.2 Maskierung von Geräteschriftarten ............... 2596.3.3 Eingebettete Schriften .................................. 2636.3.4 Bitmap-Text .................................................. 2646.3.5 Text als Grafik einfügen................................. 265
Inhalt | 7
INH
ALT
6.3.6 Pixelfonts ..................................................... 2666.3.7 Fehlende Schriften ersetzen .......................... 269
6.4 Schreibregeln ........................................................... 2706.5 TLF-Texterstellung in Flash ........................................ 273
6.5.1 TLF-Textfeld-Eigenschaften ........................... 2746.5.2 TLF-Textfeld formatieren ............................... 2756.5.3 TLF-Textfeld-Eigenschaften »Erweitert – Zeichen« ................................... 2756.5.4 TLF-Textfeld-Eigenschaften »Absatz« ............. 2796.5.5 TLF-Textfeld-Eigenschaften »Container und Fluss« .................................. 280
7 Veröffentlichung ..................................................... 2857.1 Veröffentlichungseinstellungen ................................. 285
7.1.1 Flash-Export (SWF) ..................................... 2867.1.2 HTML-Export ............................................... 2937.1.3 GIF-Export ................................................... 2977.1.4 JPEG-Export ................................................. 2997.1.5 PNG-Export ................................................. 300
7.2 Einbettung mit dem SWFObject ............................... 3017.2.1 Express Install ............................................... 3037.2.2 FlashVars ...................................................... 3057.2.3 Parameter .................................................... 309
7.3 Ladeverhalten von Flash-Filmen ............................... 3137.4 Positionierung per CSS ............................................. 315
7.4.1 CSS erstellen ................................................ 3167.4.2 Flash-Film mittig positionieren ..................... 3167.4.3 Flash-Film am oberen und unteren Rand mittig positionieren ...................................... 318
7.5 Export ...................................................................... 3207.6 Eingabehilfen ........................................................... 321
7.6.1 Fenster »Eingabehilfen« ................................ 3217.6.2 Eingabehilfe für Symbole .............................. 322
7.7 FLA-Datei als XFL-Datei speichern ............................ 3227.7.1 Speichern als XFL-Dokument ........................ 3237.7.2 Aktualisieren von Grafikmaterial ................... 323
Teil III ActionScript
8 ActionScript-Grundlagen ........................................ 3278.1 ActionScript-Versionen ............................................. 3278.2 ActionScript-Editor ................................................... 329
8.2.2 Skripthilfe und Experten-Modus ................... 330
8 | Inhalt
8.2.3 Codefragmente ............................................ 3318.2.4 Funktionen des ActionScript-Editors ............. 332
8.3 Mein erstes Skript .................................................... 3358.4 Variablen .................................................................. 3368.5 Datentypen .............................................................. 338
8.5.1 Strikte Typisierung und lose Typisierung ........ 3398.5.2 Datentypen umwandeln ............................... 3408.5.3 Geltungsbereich ........................................... 342
8.6 Arrays ....................................................................... 3438.6.1 Indizierte Arrays ........................................... 3438.6.2 Assoziative Arrays ......................................... 3448.6.3 Mehrdimensionale Arrays ............................. 3458.6.4 Arrays sortieren ............................................ 3458.6.5 Typisiertes Array: Vector ............................... 347
8.7 Einfache Operatoren ................................................ 3488.7.1 Arithmetische Operatoren ............................ 3488.7.2 Vergleichsoperatoren und Fallunterscheidung ....................................... 3498.7.3 Logische Operatoren .................................... 352
8.8 Bitweise Operatoren ................................................. 3538.9 Schleifen .................................................................. 355
8.9.1 while-Schleife ............................................... 3568.9.2 do-while-Schleife ......................................... 3588.9.3 for-Schleife ................................................... 3588.9.4 for-in-Schleife............................................... 3598.9.5 for-each-in-Schleife ...................................... 360
8.10 Funktionen ............................................................... 3608.11 Steuerung von Zeitleisten ......................................... 3648.12 Anzeigeliste .............................................................. 366
8.12.1 Anzeigeklassen ............................................. 3668.12.2 Anzeigeobjekte referenzieren ....................... 3698.12.3 Anzeigeobjekte hinzufügen und entfernen .... 3708.12.4 Anzeigeobjekte aus dem Speicher entfernen ...3728.12.5 Reihenfolge in der Anzeigeliste ändern ......... 3738.12.6 Struktur einer Anzeigeliste ............................ 3738.12.7 Instanzen aus der Bibliothek erzeugen .......... 374
8.13 Ereignisse ................................................................. 3768.13.1 Ereignisse, Ereignis-Listener und Ereignisprozeduren ....................................... 3768.13.2 target und currentTarget ............................... 3778.13.3 Ereignis-Listener entfernen ........................... 3788.13.4 Häufig verwendete Ereignisse mit Anzeigeobjekten .......................................... 380
8.14 Loader...................................................................... 382
Inhalt | 9
INH
ALT
8.15 Fehlersuche .............................................................. 3898.15.1 Anwendung ................................................. 3898.15.2 Haltepunkte ................................................. 3908.15.3 Debug-Konsole ............................................ 3908.15.4 Remote-Debug............................................. 3918.15.5 Häufige Fehlerursachen ................................ 394
9 Animation mit ActionScript .................................... 3979.1 Eigenschaften von Anzeigeobjekten .......................... 3979.2 Ereignisse ................................................................. 398
9.2.1 ENTER_FRAME ............................................ 3989.2.2 MOUSE_MOVE ............................................ 401
9.3 Timer ....................................................................... 4039.4 Geschwindigkeit und Beschleunigung ....................... 4049.5 Easing ...................................................................... 406
9.5.1 Bewegung .................................................... 4069.5.2 Weitere Instanzeigenschaften animieren ....... 4089.5.3 Animation beenden oder loopen .................. 409
9.6 Trigonometrie ........................................................... 4129.6.1 Koordinatensystem ....................................... 4129.6.2 Winkelangabe .............................................. 4139.6.3 Grad- und Bogenmaß – Umrechnung ............ 4139.6.4 Das rechtwinklige Dreieck ............................ 4149.6.5 Schwingende Bewegung ............................... 4159.6.6 Kreisbewegung ............................................. 4229.6.7 Winkel zwischen zwei Punkten berechnen .... 424
9.7 Tween-Engines ......................................................... 4289.7.1 Adobes Tween-Klasse ................................... 4299.7.2 Tween-Engines ............................................. 4299.7.3 TweenLite .................................................... 4309.7.4 TweenLite-Plugins ........................................ 438
10 Einführung in die objekt orientierte Programmierung ..................................................... 445
10.1 Die Welt der Objekte ............................................... 44710.2 Klassen und Objekte ................................................ 448
10.2.1 Klassenbezeichner und Dateiname ............... 44810.2.2 Klassendefinition und Konstruktor ................ 44910.2.3 Objekt initialisieren ...................................... 450
10.3 Eigenschaften ........................................................... 45110.4 Methoden ................................................................ 45210.5 Paket- und Klassenpfad ............................................ 453
10.5.1 Pakete und Klassen importieren .................... 45410.5.2 Eigene Pakete und Klassenpfade ................... 456
10 | Inhalt
10.5.3 Objektorientierte Projekte mit dem Projekt-Fenster verwalten ............................. 457
10.6 Sichtbarkeit .............................................................. 46010.7 Instanz- und Klassenmitglieder ................................. 46210.8 Dokumentklasse ....................................................... 46410.9 Symbole als Klasse .................................................... 46710.10 Getter-/Setter-Methoden ......................................... 472
10.10.1 Getter-Methode .......................................... 47210.10.2 Setter-Methode ........................................... 473
10.11 Vererbung ................................................................ 47410.11.1 Methoden und Eigenschaften der Superklasse ansteuern ................................. 47710.11.2 Methoden und Eigenschaften einer Basisklasse überschreiben ............................ 477
11 Zeichnungs-API ...................................................... 47911.1 Graphics-Klasse ........................................................ 47911.2 Anzeigeobjekt erstellen ............................................ 479
11.2.1 Linien zeichnen ............................................ 48011.2.2 Bitmap-Linien zeichnen ................................ 48511.2.3 Kurven zeichnen .......................................... 48511.2.4 Füllungen erzeugen ...................................... 48711.2.5 Rechteck zeichnen ....................................... 48811.2.6 Rechteck mit abgerundeten Ecken zeichnen ...49311.2.7 Kreis zeichnen .............................................. 49411.2.8 Ellipse zeichnen ............................................ 49411.2.9 Farbverlaufslinien und -füllungen erzeugen ... 494
12 Komponenten ......................................................... 49712.1 Einführung ............................................................... 49712.2 Anwendung ............................................................. 498
12.2.1 Komponenten in der Entwicklungs - umgebung .................................................... 49812.2.2 Komponenten mit ActionScript erzeugen ..... 50012.2.3 Komponenten über ActionScript ansteuern ...50112.2.4 Eigenschaften ............................................... 50212.2.5 Methoden .................................................... 50212.2.6 Ereignisse ..................................................... 503
12.3 Erscheinungsbild anpassen ....................................... 51012.4 Stile ......................................................................... 511
12.4.1 Komponenteninstanzen anpassen ................. 51112.4.2 Komponententyp anpassen .......................... 511
12.5 Skins ........................................................................ 512
Inhalt | 11
INH
ALT
12.5.1 Skin eines Komponententyps anpassen ......... 51312.5.2 Skin einer Komponenteninstanz anpassen .... 514
Teil IV Multimedia und dynamische Inhalte
13 Bitmaps ................................................................... 51913.1 Bitmap-Import ......................................................... 51913.2 Photoshop-Import .................................................... 522
13.2.1 Bildebenen ................................................... 52313.2.2 Textebenen .................................................. 524
13.3 Illustrator-Import ...................................................... 52513.3.1 Bildebenen ................................................... 52713.3.2 Textebenen .................................................. 52713.3.3 Pfade ........................................................... 528
13.4 FXG ......................................................................... 52813.5 Mischmodi und Filter ............................................... 529
13.5.1 Bitmap-Filter anwenden ............................... 53113.5.2 Bitmap-Filter animieren ................................ 532
13.6 Mischmodi und Bitmap-Filter mit ActionScript ......... 53313.6.1 Mischmodi ................................................... 53313.6.2 Bitmap-Filter ................................................ 533
13.7 Bitmaps mit ActionScript .......................................... 53613.7.1 Bitmap-Klasse .............................................. 53613.7.2 BitmapData-Klasse ....................................... 53713.7.3 Pixel einer Bitmap auslesen und setzen ......... 538
14 Sound ...................................................................... 54514.1 Hintergrundwissen ................................................... 54514.2 Import und Veröffentlichung .................................... 547
14.2.1 Veröffentlichungseinstellungen ..................... 54714.2.2 Tipps für den Import .................................... 550
14.3 Sound in der Zeitleiste .............................................. 55114.3.1 Soundtypen.................................................. 55114.3.2 Soundeffekte ................................................ 554
14.4 Sounds mit ActionScript ........................................... 55714.4.1 Sound-Klasse................................................ 55814.4.2 Sound laden ................................................. 55914.4.3 Sound abspielen ........................................... 56114.4.4 Sound-Streaming steuern ............................. 56214.4.5 Sound pausieren........................................... 56614.4.6 Soundlautstärke ........................................... 568
14.5 Soundspektrum ........................................................ 575
12 | Inhalt
15 Video ....................................................................... 58115.1 Techniken zur Bereitstellung ..................................... 58115.2 Adobe Media Encoder .............................................. 583
15.2.1 Video-Format ............................................... 58315.2.2 Kodierung .................................................... 58515.2.3 Exporteinstellungen ...................................... 586
15.3 Video-Import in Flash ............................................... 59215.3.1 Video-Playback-Komponente ....................... 59315.3.2 FLV in Zeitleiste integrieren und abspielen .... 594
15.4 Video-Anwendung ................................................... 59515.4.1 Eingebettete Videos ..................................... 59515.4.2 Externe Videos ............................................. 59715.4.3 Vollbild-Modus ............................................ 60115.4.4 Audio-Spur eines Videos steuern .................. 60215.4.5 Eigenschaften der NetStream-Klasse ............. 60315.4.6 Cue-Points ................................................... 605
16 Dynamischer Text ................................................... 61516.1 Klassischer Text oder TLF-Text? ................................. 61516.2 Dynamische Textfelder und Eingabetextfelder ........... 617
16.2.1 Textfeld-Einstellungen .................................. 61816.2.2 Zeicheneinbettung ....................................... 620
16.3 Text zuweisen und abfragen ...................................... 62216.3.1 Tabulator-Reihenfolge .................................. 62816.3.2 Eingabefokus ................................................ 629
16.4 Textdokument laden und ausgeben .......................... 63116.4.1 Zeichenkodierung ......................................... 63116.4.2 Textdokumente laden ................................... 632
16.5 Textfelder mit ActionScript steuern ........................... 63716.5.1 Textfeld-Eigenschaften .................................. 63716.5.2 TextFormat ................................................... 64016.5.3 Schriftart-Symbol und Schriftart-Klasse ......... 64216.5.4 Textfeld-Methoden ....................................... 645
16.6 Textscroller – die UIScrollBarKomponente ................. 64616.6.1 Textbereich definieren .................................. 64716.6.2 Bildlauf aktivieren ......................................... 64716.6.3 UIScrollBar-Komponente einfügen ................ 64816.6.4 Ziel der Scroller-Komponente festlegen ........ 648
16.7 Text Layout Framework ............................................ 64916.7.1 Text Layout Framework und MVC Design Pattern ......................................................... 64916.7.2 Hierarchische Struktur .................................. 65016.7.3 TextLayoutFormat......................................... 65116.7.4 ParagraphElement ........................................ 655
Inhalt | 13
INH
ALT
16.7.5 SpanElement ................................................ 65616.7.6 Text-Container ............................................. 65616.7.7 Mehrspaltiger Text ........................................ 657
16.8 Reguläre Ausdrücke .................................................. 66116.8.1 RegExp-Klasse .............................................. 66116.8.2 Methoden der RegExp-Klasse ....................... 66116.8.3 Text ersetzen ................................................ 66216.8.4 Beispiele ...................................................... 663
17 Flash, PHP und MySQL .......................................... 66717.1 PHP .......................................................................... 667
17.1.1 Voraussetzungen .......................................... 66817.1.2 Lokaler Webserver........................................ 66917.1.3 Sprachelemente und Syntax.......................... 67217.1.4 Datums- und Zeitfunktion ............................ 67517.1.5 Daten in Flash empfangen ............................ 67717.1.6 Daten von Flash an PHP senden und wieder empfangen ....................................... 68417.1.7 Ein Kontaktformular erstellen ....................... 68917.1.8 Sicherheit ..................................................... 69717.1.9 PHP-Skripte testen und Fehlermeldungen ..... 700
17.2 MySQL ..................................................................... 70117.2.1 phpMyAdmin ............................................... 70317.2.2 Datenbank erstellen ..................................... 70317.2.3 Datenbanktabelle erstellen ........................... 70417.2.4 Tabellenspalten definieren ............................ 70417.2.5 Datentypen .................................................. 70517.2.6 Felder bearbeiten, löschen und hinzufügen ... 70617.2.7 Datensätze einfügen ..................................... 70717.2.8 Tabellen exportieren ..................................... 70817.2.9 Tabellen importieren .................................... 710
17.3 PHP und MySQL im Team ........................................ 71017.3.1 Datenbank-Login.......................................... 71017.3.2 Datenbankverbindung herstellen .................. 71117.3.3 Daten an Flash übergeben ............................ 71317.3.4 Datenbanksätze einfügen ............................. 72017.3.5 Sicherheit ..................................................... 72317.3.6 Datensätze aktualisieren ............................... 726
18 XML ........................................................................ 72718.1 XML definieren ......................................................... 72718.2 XML-Dokument laden .............................................. 729
18.2.1 Wohlgeformtheit .......................................... 73018.2.2 Kommentare ................................................ 731
14 | Inhalt
18.2.3 Anzahl von Elementen .................................. 73118.2.4 Daten filtern ................................................. 732
18.3 Formatierungen in XML ............................................ 73818.4 XML bearbeiten........................................................ 741
18.4.1 Elementwerte ändern ................................... 74118.4.2 Elemente hinzufügen .................................... 74118.4.3 Elemente entfernen ...................................... 743
18.5 XML sortieren .......................................................... 74518.5.1 XML nach Knoten sortieren .......................... 74518.5.2 XML nach Attribut sortieren ......................... 747
18.6 XML speichern ......................................................... 748
19 FileReference .......................................................... 75719.1 Öffnen und Speichern .............................................. 75719.2 Download ................................................................ 76119.3 Upload ..................................................................... 765
19.3.1 Methoden .................................................... 76719.3.2 Ereignis-Listener ........................................... 76819.3.3 Eigenschaften ............................................... 77019.3.4 Dateiendungen überprüfen .......................... 77119.3.5 Upload – FAQ .............................................. 777
Teil V Weitere Einsatzgebiete
20 Spieleprogrammierung ........................................... 78520.1 Interaktion ............................................................... 785
20.1.1 Tastatursteuerung ......................................... 78520.1.2 Maussteuerung............................................. 787
20.2 Kollisionserkennung ................................................. 78920.2.1 Einfache Kollisionserkennung mit hitTestObject und hitTestPoint ...................... 78920.2.2 Pixelbasierte Kollisionserkennung ................. 79220.2.3 Positionsbasierte Kollisionserkennung ........... 796
20.3 Zeit .......................................................................... 79920.4 Daten lokal speichern mit einem SharedObject ......... 80120.5 Asteroids-Spiel ......................................................... 804
20.5.1 Startbildschirm ............................................. 80520.5.2 Soundobjekte initialisieren ........................... 80620.5.3 Spielvariablen initialisieren ........................... 80620.5.4 Raumschiffsteuerung .................................... 80720.5.5 Feuer frei ..................................................... 80820.5.6 Asteroiden erzeugen ..................................... 810
Inhalt | 15
INH
ALT
20.5.7 Bewegung und Kollisionserkennung der Asteroiden ............................................. 81320.5.8 Schwierigkeitsgrad erhöhen ......................... 81420.5.9 Schussenergie aufladen ................................ 81420.5.10 Lebenspunkte erzeugen ............................... 81420.5.11 SlowMotion-Punkte erzeugen ...................... 81620.5.12 Spiel beenden ............................................. 817
20.6 Verbesserungen ........................................................ 81920.7 Highscore ................................................................. 819
20.7.1 Highscore laden ........................................... 82020.7.2 Highscore aktualisieren und speichern .......... 82120.7.3 Highscore darstellen ..................................... 82420.7.4 Spiel neu starten .......................................... 825
20.8 Highscore-Sicherheit ................................................ 82620.8.1 Hashfunktion verwenden ............................. 82720.8.2 Zeitpunkte in einem Array speichern ............ 82720.8.3 Hashwerte erzeugen ..................................... 82820.8.4 Analyse der Verschleierungstechnik .............. 831
21 Ein Blick über den Tellerrand .................................. 83321.1 Adobe AIR ............................................................... 833
21.1.1 Programmierung mit AIR .............................. 83421.1.2 2.0-Update .................................................. 834
21.2 Adobe Flex ............................................................... 83521.3 Adobe Flash Catalyst ................................................ 83721.4 Mobile Endgeräte ..................................................... 839
21.4.1 Adobe Flash Lite .......................................... 84021.4.2 Adobe Device Central CS5 ........................... 841
21.5 Third-Party-Tools ...................................................... 84221.5.1 ActionScript-Entwicklungsumgebungen ........ 84221.5.2 Bildschirmschoner ........................................ 84721.5.3 Native Desktop-Anwendungen ..................... 84821.5.4 3D-Animationen .......................................... 849
Teil VI Anhang
A FAQ ......................................................................... 853B Key-Codes der Key-Klasse ........................................ 865C Unicode (Lateinisch einfach) ..................................... 869D URL-Kodierung ......................................................... 873E Die DVD zum Buch .................................................. 875
Index ................................................................................ 877
16 | Video-Lektionen
Bonuskapitel
Auf der Buch-DVD finden Sie ein Bonuskapitel mit einer nütz-lichen Referenz der wichtigsten auf ActionScript 3 basierenden UI-Komponenten.
Video-Lektionen
Als Ergänzung zum Buch möchten wir Ihnen auf der beiliegenden DVD Lehrfilme zur 3D-Animation aus unserem Video-Training »Adobe Flash CS5« von Helge Maus (ISBN 978-3-8362-1572-5) zeigen.
Mit Flash im 3D-Raum [01:18 Std.]EE Einleitung [00:27 Min.]EE Objekte in 3D bewegen [09:30 Min.]EE 3D-Szenen animieren [14:18 Min.]EE Bones & Inverse Kinematik [11:22 Min.]EE Posen und Gelenke nutzen [09:36 Min.]EE Animationstypen in 3D [03:15 Min.]EE Animationen übertragen [05:33 Min.]EE Bones federn und dämpfen [04:28 Min.]EE Einen Charakter animieren [10:40 Min.]EE Das Bindungswerkzeug [09:15 Min.]
VID
EO
-LE
KT
ION
EN
WO
RK
SH
OP
S
Workshops | 17
WO
RK
SH
OP
S
Workshops
Arbeitsumgebung
EE Eigene Tastenkürzel definieren ........................................... 65
Zeichnen
EE Farben einer umgewandelten Bitmap-Grafik austauschen ...105
Symbole, Instanzen und die Bibliothek
EE Instanzeigenschaften ändern ............................................ 131EE Eine Schaltfläche erstellen ................................................ 137
Animation
EE Die Animation anlegen .................................................... 162EE Animation in MovieClip verschachteln ............................. 166EE Geschwindigkeit ändern .................................................. 168EE Ein Bewegungs-Tweening erstellen ................................... 175EE Eine Animation entlang eines Pfades erstellen .................. 180EE Den Bewegungs-Editor einsetzen ..................................... 188EE Beschleunigung im Bewegungs-Editor nutzen .................. 192EE Klassisches Tween an Pfad ausrichten ............................... 199EE Klassisches Tween mit Beschleunigung und Abbremsung ... 203EE Ein fahrendes Motorrad mit einem beschleunigten
klassischen Tween ............................................................ 206EE Ein springender Ball mit beschleunigtem klassischem
Tween ............................................................................. 208EE Bitmap in Vektoren umwandeln ....................................... 213EE Formmarken für einen Form-Tween einsetzen ................. 216EE Verlaufsmaske erstellen .................................................... 220EE Verschachtelung in einer Galerie mit Maskeneffekt .......... 224EE Charakteranimation mit inverser Kinematik ...................... 235
Text
EE Maskierung von Geräteschriften ....................................... 260EE Textfelder miteinander verbinden ..................................... 282
Veröffentlichung
EE FlashVars einsetzen .......................................................... 307EE Flash-Film mittig im Browser zentrieren ........................... 316
18 | Workshops
ActionScript-Grundlagen
EE Navigation mit externen Flash-Filmen .............................. 384EE Remote-Debugging mit dem »De MonsterDebugger« ...... 392
Animation mit ActionScript
EE Animation mit Event.ENTER_FRAME-Ereignis .................. 400EE Animation mit MouseEvent.MOUSE_MOVE-Ereignis ....... 402EE Bewegung mit Easing ....................................................... 407EE FadeOut mit Easing ......................................................... 408EE Animation beenden ......................................................... 410EE Fading-Animation loopen ................................................ 411EE Schwingende Bewegung auf der x-Achse ......................... 415EE Schwingende Bewegung auf der y-Achse ......................... 417EE 3D-Bewegung und Tiefenänderung .................................. 419EE Kreis- und ellipsenförmige Bewegung .............................. 422EE Spiralenförmige Bewegung ............................................... 423EE MovieClip in Mausrichtung drehen .................................. 424EE MovieClip in Mausrichtung bewegen ............................... 425EE 3D-Flip mit TweenLite ..................................................... 435EE Schneeflockensimulation mit TweenLite ........................... 442
Einführung in die objekt orientierte Programmierung
EE Klasse und Objekt erstellen .............................................. 450EE Eine analoge Uhr erstellen ............................................... 468
Zeichnungs-API
EE Interaktive Linie zeichnen ................................................ 482EE Interaktive Kurve zeichnen ............................................... 486EE Interaktives Zeichnen von Rechtecken ............................. 488
Komponenten
EE Gallery mit Slideshow-Funktion mithilfe von Komponenten ........................................................... 503
Bitmaps
EE Bitmap-Filter mit ActionScript steuern ............................. 534EE Farbwerte einer Bitmap auslesen...................................... 548EE Kreispunkt-Muster mit setPixel erzeugen ......................... 541
Sound
EE Eine Schaltfläche mit Sounds versehen ............................. 552EE Einen Streaming-Sound ein- und ausblenden ................... 555
WO
RK
SH
OP
S
Workshops | 19
WO
RK
SH
OP
S
EE Mehrere Sounds zuweisen, abspielen und stoppen .......... 564EE Sound pausieren und abspielen ........................................ 566EE Soundlautstärke über einen Slider steuern ....................... 569EE Das Soundspektrum eines abspielenden Sounds
auslesen und grafisch darstellen ....................................... 576
Video
EE Ein eingebettetes Video über die Zeit leiste steuern .......... 595EE Ein Video über ActionScript abspielen und steuern .......... 599EE Ereignis-Cue-Points einsetzen .......................................... 607EE Navigation-Cue-Points einsetzen...................................... 611
Dynamischer Text
EE Texteingabe abfragen und ausgeben ................................. 626EE FocusEvent.FOCUS_IN und FocusEvent.FOCUS_OUT
zur Hervorhebung von Eingabetextfeldern nutzen ............ 629EE Textdokument laden und ausgeben .................................. 635EE Mehrspaltigen Text über ActionScript mithilfe des
Text Layout Frameworks erzeugen ................................... 658
Flash, PHP und MySQL
EE Serverseitiges Datum und Zeit in Flash ausgeben.............. 682EE Kontaktformular – Eingabe überprüfen und zurücksetzen ...690EE Kontaktformular – Kontaktdaten an ein PHP-Skript
senden ............................................................................ 693EE Kontaktformular – PHP-Skript für den Mailversand
erstellen .......................................................................... 696EE Kontaktformular – PHP-Skript mit Sicherheitsfunktionen
versehen .......................................................................... 699EE Gästebuch – Datensätze auslesen und in Flash darstellen ... 715EE Gästebuch – Daten von Flash an PHP übergeben und
Datensätze erstellen ......................................................... 720EE Gästebuch – SQL-Injections verhindern............................ 725
XML
EE RSS-Feed einlesen und Daten des Feeds in Flash darstellen ......................................................................... 734
EE RSS-Feed serverseitig einlesen und an den Flash-Film übergeben ....................................................................... 737
EE HTML-Formatierungen in XML-Knoten integrieren ........... 739EE XML-Dokument laden, ändern und mittels eines
serverseitigen Skripts wieder speichern ............................ 748
20 | Workshops
FileReference
EE Ein Textdokument in den Flash Player laden und ausgeben ......................................................................... 758
EE Daten lokal abspeichern................................................... 760EE Download via FileReference-Klasse mit
Fortschrittsbalken ............................................................ 763EE Die Upload-Methode nutzen und Dateien clientseitig
auf ihre Dateiendungen hin überprüfen ........................... 771EE Den Fortschritt des Upload-Vorgangs anzeigen ................ 774EE Upload: Dateiendung serverseitig
überprüfen ...................................................................... 776
Spieleprogrammierung
EE Kollisionserkennung mit Randbereichen und Bouncing ..... 799EE Spielername lokal speichern und lesen ............................. 803
Vorwort | 21
VO
RW
OR
T
Vorwort
Liebe Leserinnen und Leser,ich (bzw. wir – dazu gleich mehr) freue mich darüber, dass ich Ihnen mein drittes Buch, das umfassende Handbuch und Nach-schlagewerk zu Flash CS5, vorstellen darf.
Das Beste vorweg: Adobe hat es offensichtlich verstanden, berechtigte Kritik von Endanwendern zu berücksichtigen und hat auf vordergründig spektakuläre Neuerungen bei Flash CS5 wis-sentlich verzichtet. Flash CS5 ist eine solide und stabile Entwick-lungsumgebung mit vielen kleinen Verbesserungen gegenüber der Vorgängerversion.
Auch ich als Autor bin inzwischen nicht ganz untätig gewe-sen und freue mich darüber, meinen Co-Autor Sven Gasser mit diesem Werk vorstellen zu dürfen. Gemeinsam hoffen wir, den gefühlt immer kürzer werdenden Intervallen von neuen Flash-Versionen gerecht zu werden, und arbeiten daran, die Qualität dieses Handbuchs noch weiter zu verbessern.
Was dieses Buch aus unserer Perspektive von anderen Büchern eindeutig unterscheidet, ist, dass es Ihnen einen unverwechsel-baren umfassenden, praktisch orientierten Überblick über sehr viele unterschiedliche Themenbereiche bietet.
Neben den theoretischen Erläuterungen zu zahlreichen The-men finden Sie darin konkrete praxisnahe Beispiele in großer Zahl. Diese Beispiele zeigen Ihnen jeweils eine praktische Anwen-dung der zuvor genannten Erläuterungen und sollten Sie dazu ermutigen, Themengebiete näher zu erforschen, um dann darauf aufbauend professionelle Projekte auf Flash-Basis in Eigenregie umzusetzen.
Warum kann dieses Buch wertvoll für Sie sein?Das Buch bietet Ihnen neben Grundlagen und Erläuterungen zu Flash CS5 und Basiswissen zum Umgang mit Flash einen sehr guten Gesamtüberblick über die vielen Einsatzmöglichkeiten von Flash. Darin inbegriffen sind viele Erläuterungen zu zahlreichen unterschiedlichen Themen. Dazu gehören u. a.:
22 | Vorwort
EE AnimationenEE Text und Textgestaltung
(inklusive Einführung in das Text Layout Framework)EE ActionScript-GrundlagenEE Einführung in die objektorientierte ProgrammierungEE Zeichnen und Zeichnen mit ActionScriptEE KomponentenEE BitmapsEE SoundsEE VideosEE PHP, MySQL und die Zusammenarbeit mit FlashEE XMLEE FileReferenceEE SpieleentwicklungEE Flash auf mobilen Endgeräten
Dieses vielseitige Themenspektrum, die detaillierten Erläuterun-gen zu den jeweiligen Themen sowie passende Praxisbeispiele machen dieses Buch aus unserer Sicht zu einem besonders wert-vollen Handbuch und Nachschlagewerk.
ZielgruppeDas Buch richtet sich an eine breite Zielgruppe: Zur Zielgruppe gehören zunächst Anwender, die Flash zum ersten Mal einset-zen. Für sie bietet das Buch einen sehr guten Einstieg, um die vielen Möglichkeiten von Flash von Grund auf kennenzulernen. Gerade die ersten Kapitel mit Themen wie dem Umgang mit der Arbeitsumgebung, Grundlagen zur Zeitleiste, Bildern und Sym-bolen, Animationen etc. gehören zu den Grundlagen, um Flash nutzen und die darauf folgenden weiterführenden Themen nach-vollziehen zu können.
Für Flash-Nutzer, die bereits mit früheren Flash-Versionen und ActionScript 1 oder 2 gearbeitet haben, sowie solche, die Flash schon lange einsetzen, ihre Kenntnisse erweitern möchten und aktuelle Lösungen für den praktischen Einsatz suchen, bietet das Buch, das vollständig auf ActionScript 3 basiert, einen soliden Ein- oder Umstieg in ActionScript 3. Außerdem beinhaltet das Buch Kapitel zu konkreten Themenschwerpunkten wie Animatio-nen, Sound, Video, XML mit ActionScript 3, alles Wissenswertes zu Text und vieles mehr.
Unabhängig vom Kenntnisstand richtet sich das Buch glei-chermaßen an Designer und Programmierer, die sich mithilfe von Flash neue Felder erschließen oder ihren bisherigen Kenntnis-stand erweitern bzw. ergänzen möchten.
Vorwort | 23
WorkshopsDie Workshops zu den jeweiligen Themen wurden so gewählt, dass sie einerseits den Anspruch erfüllen, zu den zuvor ausführ-lich erläuterten Grundlagen praktische Beispiele zu zeigen, und andererseits direkt in der Praxis einsetzbar sind.
Dabei möchten wir Sie an dieser Stelle ausdrücklich dazu ermuntern, die gezeigten Beispiele als Basis für eigene Projekte zu nutzen und mithilfe der gewonnenen Grundlagenkenntnisse weiterzuentwickeln.
Verwenden Sie die gezeigten Beispiele zur Inspiration und las-sen Sie Ihren Ideen freien Lauf!
Nick bedankt sich …… denn ohne die direkte bzw. indirekte Unterstützung von Freun-den und Partnern wäre auch diese dritte Ausgabe des Buches so nicht möglich gewesen.
Selbstverständlich gilt mein besonderer Dank als Allererstes meiner Familie.
Darüber hinaus möchte ich mich persönlich direkt bedanken bei …
EE Yvonne – danke für dein Verständnis und für deine Rück-sichtnahme. »All the things you do to me and everything you said …«. Na …? ;) Ich liebe dich!
EE Sven Gasser – meinem Co-Autor – für die gute ZusammenarbeitEE Florian Plag – unserem technischen Gutachter und unserer
persönlichen »Lebensversicherung« – danke für dein besonde-res Engagement und die gute Zusammenarbeit!
EE Muse, The Living End, The Clash, Social Distortion, Johnny Cash und Volbeat … – ihr habt mich wieder einmal gut begleitet.
EE »Last, but definitely not least …« möchte ich mich erneut besonders bei allen Lesern und auch allen Kritikern meiner ersten beiden Büchern bedanken: Sie alle haben es wieder geschafft, mich für ein weiteres Buch zu motivieren!
Nick Weschkalnies
Sven bedankt sich …… zuallererst bei Nick für das große Vertrauen, das mir erst die Möglichkeit gegeben hat, an diesem großartigen Projekt mitzu-wirken. Außerdem gilt mein Dank natürlich all meinen Freunden, Bekannten und den Mitarbeitern meiner Agentur, die während der Arbeit an dem Buch stets voll und ganz hinter mir standen.
Natürlich geht auch bei mir ein ganz besonders großes Dan-keschön an meine Familie. Ohne euch und eure stetige Unter-
Alle Workshops finden Sie auch auf der Buch-DVD. Genau-ere Informationen hierzu erhalten Sie in Anhang E.
24 | Vorwort
stützung wäre mir all das, was ich bisher verwirklichen konnte, niemals möglich gewesen.
Auch ich möchte mich abschließend noch bei ein paar Leuten persönlich bedanken, und zwar bei …
EE Patrick Gebauer – vielen Dank für all die Überstunden in unse-rer Agentur, in denen du mir viele meiner alltäglichen Projekte abgenommen hast, damit ich mich so oft wie möglich, auch während der Arbeitszeit, zum Schreiben hinter die Tastatur klemmen konnte.
EE Florian Plag – genau wie Nick möchte ich mich natürlich auch bei dir für deinen unermüdlichen Einsatz und dein unglaublich großes Fachwissen bedanken, mit dem du uns häufig während des Entstehungsprozesses des Skriptes hast helfen können. Danke für die tolle Zusammenarbeit!
EE Zu guter Letzt möchte ich mich bei einigen meiner Agen-turmitarbeitern wie Benjamin Böhm, Stefanie Mühlhaus und Berna Keklikler bedanken, die alle an dem Projekt beteiligt waren und die viele Ideen, Verbesserungsvorschläge und Engagement mit eingebracht haben.
Sven Gasser
Wir möchten uns gemeinsam bedanken bei …EE unserem Verlag und all denjenigen, die an diesem Buch mit-
gearbeitet habenEE Anja Riehl für ihre GrafikenEE Henning Stein für seine stilvollen FotografienEE Heiko Klüh für seine stimmigen SoundsamplesEE Jack Doyle für die gute Arbeit und die gute Dokumentation an
seiner Tween-EngineEE Jan Goyvaerts für die Bereitstellung von RegexBuddy 3
Über die Autoren
Nick Weschkalnies | (http://www.medianetic.de)Nick Weschkalnies, seit 2000 selbstständig tätig, ist Entwickler und Berater bei der Umsetzung von Medienprojekten für den On- und Offline-Bereich mit einem breiten Spektrum. Neben sei-ner praktischen Tätigkeit schreibt er seit 2002 Beiträge und Arti-kel für Fachzeitschriften, Internetportale und -magazine. 2008 wurde sein erstes Buch zu Flash CS3 veröffentlicht.
Nick Weschkalnies ist Autodidakt – seine Herangehensweise ist stets praxis- und problemlösungsorientiert. Zunächst angefan-gen als Mitglied einer der ersten deutschen Flash-Communities,
Vorwort | 25
den Flashworkern, über Beta-Tester und Mitglied in verschiede-nen Foren, kümmert er sich intensiv neben seiner Arbeit als Ent-wickler um die Belange von Endanwendern.
Sven Gasser | (http://www.delta-agentur.de)Seit dem Jahr 2003 ist Sven Gasser Teilhaber der Werbeagentur Delta Agentur in Bochum. Dort ist er Entwickler und Berater im Bereich Werbekommunikation für Web und Print. Außerdem ist er im TV und Radio als Experte für themenbezogene Reportagen präsent. Er ist ausgebildeter Fachinformatiker und wird im Jahr 2011 zusätzlich das Studium zum Betriebswirt abschließen, um das betriebsorientierte Denken und Handeln der Agentur weiter zu fördern.
2001 gründete er das deutschsprachige Forum Flashbattle.de. Neben seiner Tätigkeit in der Agentur schreibt er Fachartikel für Internetportale und Magazine. Seit 2004 hat er zusätzlich die fachliche Beratung für verschiedene IT-Bücher übernommen. Des Weiteren kümmert er sich im IHK-Prüfungsausschuss Bochum um die Mediengestalter in den Bereichen Digital und Print.
Machen Sie mit!Schreiben Sie uns, ob Ihnen das Buch gefallen hat oder was Ihnen ggf. nicht gefallen hat. Sie können uns auch Vorschläge, Beispiele, freies Bild-, Audio- oder Videomaterial für die nächste Ausgabe schicken. Wir berücksichtigen jedes Feedback. Versprochen!
In diesem Sinne …… wünschen wir Ihnen viel Freude beim Lesen dieses Buchs und beim Einsatz der gewonnenen Erkenntnisse!
26 | Vorwort
Autorenbeiträge
Einige Kapitel wurden ursprünglich von Nick Weschkalnies geschrieben und für diese Ausgabe von Sven Gasser vollständig aktualisiert und überarbeitet. Andere Kapitel wurden von Nick Weschkalnies sowohl verfasst als auch für diese Ausgabe vollstän-dig neu überarbeitet. Die folgende Tabelle enthält eine Übersicht über die Zuständigkeiten der Autoren.
Kapitel Verantwortlicher Autor
1, »Was ist Flash?« Sven Gasser
2, »Arbeitsumgebung« Sven Gasser
3, »Zeichnen« Sven Gasser
4, »Symbole« Sven Gasser
5, »Animation« Sven Gasser
6, »Text« Sven Gasser
7, »Veröffentlichung« Sven Gasser
8, »ActionScript« Nick Weschkalnies
9, »Animation mit ActionScript« Nick Weschkalnies
10, »Einführung in die objektorientierte Programmierung«
Nick Weschkalnies
11, »Zeichnungs-API” Nick Weschkalnies
12, »Komponenten« Nick Weschkalnies
13, »Bitmaps« Nick Weschkalnies
14, »Sound« Nick Weschkalnies
15, »Video« Nick Weschkalnies
16, »Dynamischer Text« Nick Weschkalnies
17, »Flash, PHP und MySQL« Nick Weschkalnies
18, »XML« Nick Weschkalnies
19, »FileReference« Nick Weschkalnies
20, »Spieleprogrammierung« Nick Weschkalnies
21, »Ein Blick über den Tellerrand« Nick Weschkalnies
Anhang Nick Weschkalnies
1.2 Entwicklungsumgebung, Player und Projektor | 29
KA
PIT
EL
1
1 Was ist Flash?
In diesem Kapitel lernen Sie, was Flash ist, wofür Sie es einsetzen können und welche Neuerungen es in Flash CS5 gegenüber den Vorgängerversionen gibt.
1.1 Flash-Historie
1996 wurde ein kleines Softwareunternehmen namens Future-Wave aus San Diego von Macromedia gekauft. Kurze Zeit später entwickelte sich aus dem Zusammenschluss beider Unternehmen und der Weiterentwicklung der Software »Future Splash Anima-tor« von FutureWave die erste Flash-Version. Zunächst wurde Flash ausschließlich für animierte Vektorgrafiken eingesetzt – seitdem hat es sich jedoch stetig, und nicht zuletzt durch die Übernahme von Macromedia seitens Adobe im Jahr 2005, wei-terentwickelt.
Flash avancierte bis heute zu einem vollständigen Multimedia-Autorensystem für Online- und Offline-Produktionen. Im Mai 2010 ist die elfte Version, Flash CS5, der beliebten Multimedia-Autorensoftware erschienen.
1.2 Entwicklungsumgebung, Player und Projektor
Mit Adobe Flash (kurz: Flash) wird die Entwicklungsumgebung zur Erstellung und Entwicklung multimedialer Inhalte, sogenann-ter »Flash-Filme« bezeichnet. Die in der Entwicklungsumgebung erstellten Dateien, auch als Quelldateien bezeichnet, haben die Dateierweiterung .fla. Quelldateien werden nur vom Flash-Anwender selbst benötigt, um das Projekt zu entwickeln oder zu erweitern.
Flash-Versionen
Die Produktbezeichnung der verschiedenen Flash-Versionen ist auf den ersten Blick nicht eindeutig und führt gelegentlich zu Missverständnissen. Die fol-gende Aufstellung klärt vermeid-liche Verwechslungen auf:
EE Flash MX Flash 6EE Flash MX 2004 Flash 7EE Flash 8 Flash 8EE Flash CS3 Flash 9EE Flash CS4 Flash 10EE Flash CS5 Flash 11
Flash Player Browser-PluginDas aktuelle Browser-Plugin für Ihren Browser können Sie unter der folgenden Adresse kostenlos herunterladen: http://get.adobe.com/de/flashplayer/
30 | 1 Was ist Flash?
Die aus den Quelldateien resultierenden Ergebnisse werden aus der Entwicklungsumgebung mittels eines Compilers erstellt. Die sogenannten SWF-Dateien mit gleichnamiger Dateiendung werden auch als Flash-Filme bezeichnet. SWF steht entweder für »Small Web Format« oder für »Shockwave Flash«. Welche Bezeichnung die richtige ist, lässt sich nicht mehr eindeutig fest-stellen.
Um Flash-Filme betrachten zu können, ist der sogenannte Flash Player erforderlich, der sowohl als »Standalone« als auch als Webbrowser-Plugin verfügbar ist und es ermöglicht, Flash im Webbrowser zu betrachten. Auch den Flash Player gibt es in verschiedenen Versionen. Zum Zeitpunkt der Drucklegung des Buches ist der Flash Player 10.1 aktuell. Aus der Entwicklungsum-gebung können zusätzlich sogenannte Projektoren erstellt wer-den. Projektoren haben in Windows die Dateierweiterung .exe und auf Macs die Dateierweiterung .app. Projektoren sind direkt ausführbar – der Flash Player ist integriert, sodass Projektoren autonom lauffähig sind.
»Shockwave Flash« oder »Small Web Format«Auch heute noch wird diskutiert, welche Bedeutung die richtige ist. Nach der ursprünglichen techni-schen Herkunft scheint »Shock-wave Flash« richtig zu sein. Hin-weise darauf fi nden sich auch heute noch in Verankerungen des Formats in Betriebssystemen und in JavaScript-Dateien von Adobe zur Einbettung eines Flash-Films in HTML. Gängiger erscheint je-doch der Begriff »Small Web For-mat«, weil die Begriffserklärung sich an der tatsächlichen Anwen-dung orientiert. Auch Adobe scheint diese Begriffserklärung in-zwischen zu bevorzugen.
GE Abbildung 1.1Ein Flash-Film im Firefox-Browser
1.3 Vektoren und Pixel | 31
Um Flash-Filme im Webbrowser zu betrachten, werden diese auf einen Webserver geladen. Sie können dann z. B. mittels HTML und JavaScript eingebettet werden und im Webbrowser abge-spielt werden.
1.3 Vektoren und Pixel
Flash lässt sich als eine Kombination aus einem Programm zur Erstellung von Vektorgrafi ken und einer Animationssoftware bezeichnen. Über Flash lassen sich verschiedene Inhalte wie Bit-maps, Texte, Sounds und Videos zusammenführen und parallel im Flash Player darstellen bzw. ausgeben.
Vektorgrafi k | Eine Vektorgrafi k ist eine Computergrafi k, zu deren Darstellung mathematische Größen verwendet werden. Die Grafi k wird aus verschiedenen Werten berechnet. Um bei-spielsweise eine Linie darstellen zu können, werden dazu min-destens zwei Größen benötigt: der Anfangspunkt einer Linie und der Endpunkt. Das resultierende Ergebnis dieser Werte ist dann die berechnete Vektorgrafi k.
Skalierbarkeit | Im Gegensatz zu einer Pixelgrafi k (auch als Bit-map oder Rastergrafi k bezeichnet), die jeden Punkt einer Linie beispielsweise in einem Raster speichert, sind Vektorgrafi ken ohne Qualitätsverlust skalierbar. Die verlustfreie Skalierung von Vektorgrafi ken ist eine der Stärken von Flash.
FE Abbildung 1.2Ein Flash-Film im (Stand-Alone-)Flash Player
HinweisDie Dateiendung .app wird auf dem Mac nicht angezeigt.
Flash arbeitet vektorbasiert.
Obwohl Flash selbst auch Pixel-grafi ken und im zunehmenden Maße Techniken zur Manipula-tion von Pixeln bietet, arbeitet Flash vektorbasiert und ist in erster Linie ein Programm zur Erstellung von Vektorgrafi ken und -animationen.
32 | 1 Was ist Flash?
GE Abbildung 1.3Oben: Pixelgrafi k, unten: Vektorgrafi k
1.4 Anwendungsbereiche
Flash wird mittlerweile in sehr vielen Bereichen genutzt – die Zeit von langatmigen Flash-Intros ist bereits lange vorbei. Nachfol-gend werden exemplarisch einige Anwendungsbereiche gezeigt.
[Rastergrafi k ]Eine Rastergrafi k besteht aus einer rasterförmigen Anordnung von Pixeln (Bildpunkten). Jedem Bild-punkt wird eine bestimmte Farbe zugeordnet. Alle diese Bildpunkte zusammengenommen ergeben dann das fertige Bild.
Dateigröße
Da geometrische Formen wie z. B. ein Rechteck oder eine El-lipse mittels Vektoren dargestellt werden, benötigen Grafi ken und Animationen im Vektorformat im Vergleich zur Darstellung über Pixelgrafi ken weniger Speicher.
Abbildung 1.4E E
Flash-Animation von HybridWorks
1.4 Anwendungsbereiche | 33
Animationen | Animationen werden sowohl für Werbeeinblen-dungen, animierte Comics, Spiele, Präsentationen als auch in vielen anderen Anwendungsbereichen unterstützend eingesetzt. Da Animationen über einen zeitlichen Ablauf verfügen, können sie dazu genutzt werden, Inhalte auf ansprechende Weise darzu-stellen bzw. zu präsentieren. Die Aufmerksamkeit des Betrachters auf bestimmte Elemente von Inhalten zu lenken, kann mittels Animationen bewusst zeitlich gesteuert werden.
Benutzeroberfl ächen | Flash wird zur Erstellung von Benutzer-oberfl ächen sowohl für das Web als auch für CD- und DVD-Pro-duktionen verwendet. Mittels Flash Lite und dem Flash Player in der Version 10.x können Benutzeroberfl ächen auch für mobile Endgeräte wie z. B. PDAs oder Handys in Flash entwickelt wer-den. Mithilfe von Adobe AIR (Adobe Integrated Runtime) lassen sich auch plattformübergreifende Desktop-Anwendungen auf Flash-Basis erstellen.
Aktuelle Meldungen | Zur Ausgabe von aktuellen Meldungen wie Nachrichten, die in einem begrenzten Bereich einer Web-seite oder Offl ine-Anwendung, z. B. einem RSS-Reader, darge-stellt werden, lässt sich Flash einsetzen.
GE Abbildung 1.5Flash-basierter RSS-Reader von my.gritwire.com
Animationsbeispielhttp://www.hybridworks.jp/icorn/top.shtml
Flash Lite und Adobe AIRMehr zu Flash Lite und zu Adobe AIR erfahren Sie in Kapitel 21, »Ein Blick über den Tellerrand«.
34 | 1 Was ist Flash?
Präsentationen | Die vielfältigen Möglichkeiten, verschiedene Medien in Flash parallel einzusetzen, bieten die idealen Voraus-setzungen für Produktpräsentationen, sowohl für Online-Präsen-tationen im Web als auch für Offl ine-Produktionen (CD, DVD, USB etc.).
Spiele | Online- und Offl ine-Spiele werden aufgrund der Leis-tungssteigerung immer häufi ger mit Flash entwickelt. Dabei las-sen sich Animationen und Interaktivität in Flash kombinieren, um sowohl klassische Spielideen (Kniffel, Pong, Snake etc.) als auch grafi sch anspruchsvollere 2D- oder 3D-Spiele umzusetzen. Die Entwicklung von 3D-Spielen in Flash ist jedoch vergleichsweise aufwendig, da Flash selbst nicht ausreichend viele 3D-Funk-tionen zur Verfügung stellt und meist eigene 3D-Engines entwi-ckelt werden müssen. Für diesen Bereich gibt es einige sehr gute Programme, mit denen Sie anspruchsvolle 3D-Grafi ken erstellen können. Dazu zählen z. B. Away3D und Cinema 4D.
BildschirmschonerFlash kann auch zur Erstellung von Bildschirmschonern verwen-det werden. Dazu sind jedoch er-gänzende Tools notwendig. Mehr dazu erfahren Sie in Kapitel 21, »Ein Blick über den Tellerrand«.
Abbildung 1.6E E
Produktpräsentation von Mercedes-Benz Deutschland (http://www.mercedes-benz.de)
Multiplayer-Spiele
In Kombination mit Server-technologien lassen sich auch Multiuser-Spiele umsetzen.
Abbildung 1.7E E
Boom Bang – Denk- und Logik-Online-Flash-Spiel
1.4 Anwendungsbereiche | 35
Rich Internet Applications | Als Rich Internet Applications (RIA) werden Anwendungen bezeichnet, die Internettechniken verwenden, um mit interaktiven Benutzeroberfl ächen auf ent-fernte Daten zuzugreifen. Dazu gehören Kalenderanwendungen, Schulungs- und Prüfungsanwendungen, Shop-Systeme, Preissu-che, Kartensuche etc. RIAs lassen sich fl ashbasiert sowohl für den Browser als auch als Desktop-Anwendung mittels Adobe AIR ent-wickeln. Für die Erstellung von RIAs wird alternativ zu Flash auch häufi g Flex verwendet. Mehr zu Flex erfahren Sie in Kapitel 21, »Ein Blick über den Tellerrand«.
Ein Beispiel ist diese Suchmaschine für Flickr-Tags: http://www.airtightinteractive.com/projects/related_tag_browser/app/
GE Abbildung 1.8Flickr: Tag-Browser von airtightinteractive.com
Video-Anwendungen | Da der Flash Player im Web sehr verbrei-tet ist und über leistungsstarke integrierte Video-Codecs verfügt, die neben einer guten Kompression auch eine verhältnismäßig gute Qualität bieten, wird Flash im Web auch als Video-Player verwendet – z. B. von youtube.com.
Video-Wiedergabe: Flash gegen HTML 5 | Aktuell ist in aller Munde das Thema HTML 5 und die Möglichkeit, damit Videos, Musik und sogar Spiele innerhalb einer Webseite abspielen zu können, ohne dass ein zusätzliches Plugin vorhanden sein muss.
Der Unterschied zu Adobe Flash ist, dass HTML 5 ein her-stellerunabhängiger Webstandard ist. Vorteil für Webentwickler ist hier, dass diese dadurch mehr Planungssicherheit haben und unabhängig von bestimmten Herstellern Animationen etc. ent-
Webseiten
Eine gute Quelle zur Inspiration sind Portale oder Flash-Awards, die in unterschiedlichen Abstän-den verschiedene Flash-Websei-ten prämieren. Lassen Sie sich inspirieren, z. B. unter:http://www.thefwa.com/
36 | 1 Was ist Flash?
wickeln können. Auch das Thema Lizenzkosten spielt dabei eine Rolle, da der Einsatz professioneller Programme wie z. B. Flash CS5 im Gegensatz zu HTML5 natürlich Geld kostet.Aktuell gibt es drei verschiedene Video-Codecs, die versuchen, das Internet zu erobern: H.264, Ogg/Theora und von Google der Codec VP8. Alle drei Codecs haben ihre Vor- und Nachteile, sodass abzuwarten ist, welcher von den dreien sich durchsetzen wird.
Der Codec H.264 wird dafür kritisiert, dass in absehbarer Zeit Lizenzkosten anfallen könnten. Bei Ogg/Theora warnen Kritiker vor den sogenannten U-Boot-Patenten. Hierbei handelt es sich um Patente, die eine Rolle für die Implementierung des Standards spielen, aber keiner weiß, ob es sich dabei um eine patentierte Technik handelt. Patentinhaber könnten sich dann eventuell erst zu Wort melden, wenn der Codec bereits genügend Verbreitung gefunden hat. Was dies für kostentechnische Konsequenzen haben könnte, dürfte jedem klar sein.
Dann gibt es noch den Codec VP8 aus dem Hause Google, der eine Ähnlichkeit mit dem H.264 haben soll. Ein großer Vorteil hier ist, dass dieser Codec von Google als Open Source zur Verfü-gung gestellt wird. Somit haben wir mit VP8 einen weiteren inte-ressanten Codec für die nächsten Jahre. Führende Anbieter wie Microsoft, Mozilla und selbstverständlich Google wollen diesen Codec mit in ihre Browser integrieren. Lediglich Apple weigert sich nach aktuellen Aussagen in einem Blog dazu. Es gilt daher abzuwarten, ob und wie lange Apple dem Druck standhalten kann, bis VP8 auch im Safari integriert wird.
Da sich aber allgemein in den letzten Monaten sehr viel getan hat, ist es noch völlig offen, welcher Codec letztlich der neue Standard für das Web sein wird. Es sollte auch bedacht werden, dass HTML 5 noch kein finaler Standard ist und teilweise noch in den Kinderschuhen steckt. HTML 5 wird Flash also wahrschein-lich nicht komplett ablösen, wie es teilweise aus einigen Kreisen bereits zu hören ist, sondern es wird lediglich zu einer Verschie-bung der Aufgabengebiete kommen.
E-Learning | Für E-Learning-Module ist Flash ebenso geeignet, da verschiedene Medien wie Audio (Sprachausgabe), Video (Lern-videos), Bitmaps und Vektoren (erläuternde Bilder, Diagramme) und Text miteinander verknüpft werden können. Über Action-Script lassen sich dann gegebenenfalls Test- und Prüfungseinhei-ten sowie eine serverseitige Verarbeitung realisieren.
HTML 5 – eine Alternative zu Flash?
Da sich bislang noch kein Codec etabliert hat, wird HTML 5 Flash in absehbarer Zeit wohl nicht ersetzen.
SimulationenMittels Vektoranimationen können schnell ladende Simulationen ge-zeigt werden – mittels Action-Script sogar dynamische Simula-tionen und Ausgaben (z. B. animierte Chartdiagramme). Simu-lationen werden häufig für E-Lear-ning-Produktionen entwickelt.
1.5 Neues in Flash CS5 | 37
1.5 Neues in Flash CS5
Die Neuerungen der Vorgängerversion Flash CS4 richteten sich schwerpunktmäßig an design- und grafi korientierte Benutzer. In der neuen Version Flash CS5 hat Adobe sowohl viele Neuerungen für Programmierer als auch für Designer eingeführt. Die wichtigs-ten Neuerungen werden im Folgenden kurz vorgestellt.
Benutzeroberfl äche | Standardmäßig befi ndet sich die Zeitleiste 1 in der Arbeitsumgebung unten, rechts befi ndet sich die Werk-zeugleiste 3. Nach der Installation ist beim ersten Öffnen von Flash die Ansicht auf Basis 2 voreingestellt.
FE Abbildung 1.9Flash-Video-Player von youtube.com
Layout verändernWie gewohnt lässt sich das Layout beliebig verändern. Flash spei-chert die vorgenommenen Ände-rungen am Layout standardmäßig ab, sodass Änderungen auch bei einem Neustart erhalten bleiben.
HE Abbildung 1.10Die neue Oberfl äche von Flash CS5
3
b
a
38 | 1 Was ist Flash?
In der Arbeitsumgebung lassen sich numerische Eigenschafts-werte wie z. B. die Position eines Objekts auch mit der Maus ver-ändern. Dazu klicken Sie einen Wert mit der Maus an, halten die Maustaste gedrückt und können dann durch eine Links- bzw. Rechtsbewegung der Maus den Wert verkleinern bzw. vergrö-ßern 1. Ein ähnliches Bedienkonzept gab es bereits in früheren Versionen von Adobe After Effects. Um die zahlreichen Einstel-lungsmöglichkeiten wie z. B. bei Textfeldern in einem begrenzten Bereich abbilden zu können, wurden teilweise Scrollleisten 2 in verschiedene Fenster integriert.
Inverse Kinematik – »Feder « | Eine sehr bemerkenswerte Neu-erung gab es in Flash CS4, das Werkzeug der inversen Kinema-tik, das das Erstellen von Charakteranimationen und natürlichen Bewegungen ermöglicht. Dieses Werkzeug wurde in Flash CS5 nochmals verbessert. Neu hinzugekommen ist die Option Feder, die das natürliche Animieren nun noch realistischer aussehen lässt. Mit der Eigenschaft Feder oder besser gesagt der Sprungfe-der, kann ab sofort die Federhärte eingestellt werden.
Um die Eigenschaft Feder zu aktivieren, wählen Sie zunächst die einzelnen Bones des IK-Skeletts mit dem Auswahlwerkzeug aus und ändern die Werte Stärke und Dämpfung im Eigenschaf-ten-Fenster im Reiter Feder 1. Damit diese Einstellungen wirk-sam werden, müssen Sie darauf achten, dass für das IK-Skelett die Option Aktivieren 2 im Eigenschaften-Fenster im Reiter Federn ausgewählt ist. Mehr zum Thema Feder fi nden Sie in Unterabschnitt »Federn aktivieren« in Abschnitt 5.10, »Inverse Kine matik«.
GE Abbildung 1.12Federeigenschaften
GE Abbildung 1.13Die Eigenschaft Federn wurde für das Skelett aktiviert.
Neue Text-Engine TLF | Das neue »Text Layout Framework« (kurz: TLF) ermöglicht in Flash CS5 die bessere Gestaltung von
GE Abbildung 1.11Numerische Eigenschaftswerte lassen sich mit der Maus ändern.
1
b
Bones
Mit Bones (engl. für »Knochen«) lassen sich Bereiche einer Form oder MovieClips miteinander verketten. Eine solche Ver-kettung wird auch als Skelett bezeichnet. Bones werden in einem Skelett in einer Hierarchie aus über- und untergeordneten Elementen miteinander verbun-den. Mehr zur inversen Kine-matik fi nden Sie in Kapitel 5, »Animation«.
a
2
1.5 Neues in Flash CS5 | 39
Texten. Textfelder lassen sich jetzt ohne Probleme in mehrere Spalten aufteilen 1. Auch die Abstände zum Rand einer Textbox können Sie jetzt in Flash einstellen. Eine weitere Neuerung ist das Verbinden von Textboxen 2. Einige Designer kennen diese Funktion vielleicht schon – beispielsweise aus Adobe InDesign. Zu langer Text fl ießt einfach von der einen Textbox in die andere mit ihr verbundene Textbox. Zusätzlich gibt es auch die Möglich-keit des Einstellens von Ligaturen. Mit dieser Option können die Buchstabenabstände sowie Ligaturen noch feiner justiert werden.
GE Abbildung 1.14Zweispaltiges Textfeld
GE Abbildung 1.15Verbindung von zwei Textfeldern
ActionScript-Editor: Codegenerierung | In der Vergangenheit hatte der ActionScript-Editor einiges an Kritik geerntet, daher wurde er jetzt um eine hilfreiche Funktion erweitert. Das Einblen-den von Codehinweisen und das automatische Vervollständigen von Quellcode werden das Entwickeln für Programmierer noch angenehmer und zugleich schneller machen. Denn es müssen jetzt lediglich die ersten Buchstaben 1 eingegeben werden, und die Codevorschläge 2 werden von Flash automatisch angezeigt.
a
b
HE Abbildung 1.16Anzeige von Codehinweisen
ab
40 | 1 Was ist Flash?
Diese können jetzt schnell mit der Maus oder der Tastatur aus-gewählt werden und ersparen Ihnen so das manuelle Tippen von ActionScript-Code. Sollten die Vorschläge verschwinden, können Sie sich diese mit der Tastenkombination (Strg) + (Leertaste) wieder anzeigen lassen, sofern Codevorschläge für Ihre Aktion verfügbar sind.
Deko-Werkzeuge | Eine weitere interessante Neuerung fi n-det sich im Deko-Werkzeug 1, das uns beim Zeichnen z. B. eine Reihe von Baumtypen zur Auswahl anbietet, die beliebig auf der Bühne positioniert werden können. Je länger die Maus-taste gedrückt bleibt, umso mehr Bäume werden auf der Bühne erstellt. Des Weiteren gibt es auch diverse Pfl anzen, Blitze oder auch Feuereffekte, die sehr schnell und realistisch für Animatio-nen genutzt werden können.
GE Abbildung 1.18Eine mit dem Deko-Werkzeug erstellte Pfl anze und zwei verschiedene Bäume
XML-basierende FLA-Quelldateien – XFL-Dateiformat | Beim Abspeichern einer Flash-Datei fi ndet sich eine weitere sehr nütz-liche Eigenschaft, da es in Flash CS5 jetzt möglich ist, das aktuelle Projekt im XFL-Format abzuspeichern.
XFL (Flash Exchange Format) ist ein neues offenes Dateifor-mat, das mit Flash CS5 eingeführt wurde. Das auf XML basie-rende Format hat den Vorteil, dass alle Ressourcen einer Flash-Quelldatei wie z. B. Bilder oder defi nierte Texte als Klartext in XML-Form gespeichert werden.
Der Workfl ow wird somit für viele Entwickler vereinfacht. Möchten Sie z. B. eine Grafi k oder einen Text in Flash ersetzen, ohne Flash zu öffnen, müssen Sie die entsprechende Grafi k nur noch in der Ordnerstruktur überschreiben oder den entspre-chenden Text in der XML-Datei ändern. Wenn zu einem späte-
GE AbbildungDeko-Werkzeug-Icon zum Erstel-len von dekorativen Grafi kele-menten
a
GE Abbildung 1.19Feueranimation mit dem Deko-Werkzeug
1.5 Neues in Flash CS5 | 41
ren Zeitpunkt Flash geöffnet wird, werden die überschriebene Grafi k sowie der überarbeitete Text automatisch innerhalb von Flash ersetzt. Mehr zu diesem Thema erfahren Sie in Abschnitt 7.7, »FLA-Datei als XFL-Datei speichern«.
Integration innerhalb der Creative Suite 5 | Der Workfl ow innerhalb der Creative Suite wurde von Adobe nochmals dahin-gehend verbessert, dass das Im- und Exportieren von Daten nun leichter vonstattengeht. Es lassen sich z. B. problemlos auch Pro-jekte aus Photoshop oder Illustrator für die Weiterverarbeitung importieren. Dazu können Dateien im FXG-Format (Flash XML Graphics) gespeichert werden.
Verbesserte Video-Funktionen | Die Video-Funktionen wurden in der neuen Version Flash CS5 weiter überarbeitet. Somit ist es für den Benutzer noch einfacher, Videos hinzuzufügen. Zudem gibt es auch neue Skins, die sich sehr leicht schon beim Einbin-den des Videos in ihrer Farbe anpassen lassen 1.
FE Abbildung 1.20Datei und Ordnerstruktur im XFL-Format
GE Abbildung 1.21Verbessertes Zusammenspiel von Flash und der restlichen Creative Suite
FE Abbildung 1.22Farbauswahl für Video-Skins bei der Video-Einbindung
a
42 | 1 Was ist Flash?
Das FLV-Video kann nun auch direkt in der Flash-IDE (Integra-ted Development Environment; engl. für »integrierte Entwick-lungsumgebung«) abgespielt werden. Dies hat den Vorteil, dass jetzt direkt ersichtlich wird, wie das Video im Flash-Film aussieht, ohne dass der ganze Film erst veröffentlicht werden muss. In einem Zusatzfenster können jetzt auch mit noch weniger Maus-klicks als zuvor neue CUE-Points hinzugefügt werden, mit denen dann beim Erreichen dieser Punkte ActionScript-Code ausgelöst werden kann.
Neue Template-Vorlagen | Eine ganze Reihe neuer Projektvor-lagen 1 ist in Flash CS5 hinzugekommen. Die Vorlagen werden direkt im Willkommensbildschirm beim Start von Flash angezeigt.
Sehr hilfreich für Einsteiger sind dabei die Beispieldateien 2, in denen sich nützliche Vorlagen für Animationen oder Action-Script-Code fi nden lassen. Sollte Flash Neuland für Sie sein, ist es zu empfehlen, dass Sie sich das eine oder andere Beispiel anse-hen, um die Arbeitsweise von Flash noch besser zu verstehen.
GE Abbildung 1.24Willkommensbildschirm von Flash für die Vorlagenauswahl
Inhalte für das iPhone | Groß angekündigt wurde von Adobe die neue Möglichkeit, mit Flash CS5 Code zu schreiben, der für die Erstellung von iPhone-Apps genutzt werden kann.
Da allerdings Apple sehr kurzfristig vor der Markteinführung von Flash CS5 die Richtlinien für das iPhone SDK 4 geändert hat, ist es nun seitens Apple untersagt, »fremden« Code in eine iPhone-App zu konvertieren. Es besteht daher ein großes Risiko für den Entwickler, dass das entwickelte App von Apple für den App-Store abgelehnt wird. Daher kann leider niemand diese Funktion von Flash wirklich sinnvoll nutzen. Da diese Entschei-dung sehr kurzfristig von Apple getroffen wurde, konnte Adobe
GE Abbildung 1.23Direktes Abspielen von Videos in der »Flash-Arbeitsumgebung«
GE Abbildung 1.25Verschiedene Animations- und ActionScript-Vorlagenbeispiele
a
b
iPhone-AppsDa die Entwicklung von iPhone-Apps mit Flash CS5 von Adobe nicht weiter vorangetrieben wird, werden wir in diesem Buch auch nicht mehr speziell auf dieses Thema eingehen. Adobe selbst rät davon ab, mit Flash CS5 Apps für das iPhone zu entwickeln.
1.5 Neues in Flash CS5 | 43
diese Funktion nicht mehr rechtzeitig aus Flash CS5 entfernen. Adobe hat aber bereits bekannt gegeben, dass die Weiterent-wicklung dieser Funktion eingestellt wird. Aus diesen Gründen macht es wenig Sinn, sich in die Funktion einzuarbeiten.
Weitere Neuerungen in Flash CS5 | Zusätzlich zu den bereits genannten Neuerungen gibt es zahlreiche kleine Detailverbesse-rungen und Neuerungen. Dazu gehören u. a.:
EE Codefragmente: Über den Menüpunkt Fenster • Codefrag-mente kann das Fenster mit diversen ActionScript-Codevorla-gen geöffnet werden. Diese sind gerade für Einsteiger in die Programmiersprache ActionScript sehr hilfreich, da hier auf sehr viele Codebeispiele zugegriffen werden kann und diese somit nicht selbst programmiert werden müssen. Auch kön-nen selbst eigene Codebausteine hinzugefügt werden, auf die während der Entwicklung mit einem Doppelklick zugegriffen werden kann. Diese Möglichkeit ist vor allem dann sehr prak-tisch, wenn man sich das immer wiederholende Eingeben von Standardcodes sparen möchte. Bestes Beispiel in diesem Fall sind die Angaben für das Importieren von ActionScript-Klassen am Anfang eines Flash-Filmes. Wenn Sie bestimmte Klassen in einem neuen Projekt immer wieder importieren müssen, macht sich diese Funktion der Codefragmente sehr vorteilhaft bemerkbar, da Sie nicht immer wieder alles von Neuen ein-tippen müssen, sondern auf Ihr selbst erstelltes Codefragment zugreifen können.
EE CS Live: Mit dem neuen Dienst Adobe CS Live können die Arbeitsabläufe für Entwickler vereinfacht werden. Eine Funk-tion, die vorwiegend für Agenturen und Kreativteams gedacht ist, die mit dem neuen Dienst die Abstimmung der Arbeits-abläufe im Kreativprozess, Kompatibilitätstests für Webseiten etc. verbessern können. Auch auf Statistiken für Browser oder Betriebssysteme kann zugegriffen werden, um die Inhalte für die nötigen Geräte zu optimieren. Viele weitere interessante Vorteile fi nden Sie auch auf der Adobe-Seite: http://www.adobe.com/de/products/creativesuite/cslive/
EE SWF-Verlauf : Eine sehr interessante Neuerung in Flash CS5 ist die Protokollierung der SWF-Dateigröße. Diese hält bei jedem Erstellen einer neuen SWF-Datei die Größe 1 und das Erstellungsdatum inklusive Uhrzeit 2 während der Testphase fest. Damit kann gut der Verlauf des Projekts in Bezug auf die Größe beobachtet werden. Sollte sich zwischen zwei Testpha-sen die Dateigröße mehr als verdoppeln, wird von Flash ein Hinweis 3 gegeben.
GE Abbildung 1.26Das Fenster Codefragmente
GE Abbildung 1.27SWF-Verlauf mit Hinweis auf eine Verdopplung der Dateigröße
a
b
c
44 | 1 Was ist Flash?
EE Hilfe-Funktion: Standardmäßig führt die Hilfe, die Sie über (F1) erreichen können, zur Online-Hilfe von Adobe. Adobe kann die Hilfeinhalte so leichter aktualisieren. Zusätzlich ste-hen Ihnen auf den Online-Seiten der Hilfe auch Benutzerkom-mentare zur Verfügung.
EE Integration mit Adobe Flash Builder: Adobe Flash Builder 4 war bisher unter dem Namen Adobe Flex Builder bekannt. Seit der Version Flash CS5 besteht nun eine direkte Anbindung an das Programm. Dies sorgt für eine höhere Effizienz bei der Entwicklung Ihrer Projekte. Mit Hilfe dieses Tools lassen sich auf möglichst einfachem Weg plattformübergreifende Rich-Internet-Anwendungen (RIAs) erstellen. Adobe Flash Builder ist eine Editor-Oberfläche eines umfangreichen ActionScript-Editors, der vielfältige Programmiersprachen zulässt, diese gut umsetzen kann und viele Hilfestellungen für angehende Entwickler bietet. Der Adobe Flash Builder kann als primärer ActionScript-Editor für Projekte genutzt und der darin erstellte Quelltext in Adobe Flash getestet, debuggt und veröffentlicht werden. Durch die direkte Anbindung an die Designanwen-dungen in der Adobe Master Collection ist Adobe Flash Buil-der die neue Brücke zwischen Designern und Entwicklern.
Tipp: Online-Hilfe deaktivieren
Wenn Sie über keine Internet-verbindung verfügen oder die Online-Hilfe nicht nutzen möch-ten, können Sie diese über das Fenster Fenster • Erweiterun-gen • Verbindungen im Menü durch Aktivierung der Option Offline-Optionen deaktivieren. Daraufhin öffnet sich via (F1) dann wie gewohnt eine Offline-Hilfe.
20.1 Interaktion | 785
KA
PIT
EL
20
20 Spieleprogrammierung
Der Browser-Spielemarkt wächst weiterhin von Jahr zu Jahr. Dabei werden immer mehr Spiele auf Flash basierend erstellt. Sowohl Computerspiel- als auch Konsolenspiel-Klassiker wie z. B. Donkey Kong, Snake, Katakis, Pong, Turrican, Tetris oder digitale Adaptionen von Brett- und Kartenspielen wie Schach, Skat, Poker oder Aufbauspiele wie beispielsweise Farmville (Social-Network-Spiele, Facebook-Spiel) sowie technisch anspruchsvollere Spiele wie 3D-Rennspiele und 3D-Ego-Shooter werden inzwischen auf Flash basierend entwickelt.
Je nach Spielprinzip werden dabei teilweise sehr viele unter-schiedliche Techniken eingesetzt. Im Verlauf dieses Kapitels werden zunächst einige grundlegende Techniken und klassische Spielbestandteile erläutert.
Abschließend finden Sie am Ende des Kapitels ein Beispiel und Erläuterungen dazu, wie Sie ein Spiel mit Flash entwickeln kön-nen. Das Spiel ist bewusst einfach gehalten.
20.1 Interaktion
Ein wichtiger Bestandteil von Spielen ist die Interaktionsmöglich-keit, die klassisch meist über die Tastatur oder über die Maus erfolgt. Da die Spielsteuerung je nach Spielprinzip sehr unter-schiedlich ausfällt, werden im Folgenden ausschließlich die Grundlagen dazu erläutert.
20.1.1 TastatursteuerungZur Steuerung über die Tastatur können Sie sogenannte Key-board-Ereignisse nutzen. Das Ereignis KeyboardEvent.KEY_DOWN wird aufgerufen, wenn eine Taste gedrückt wurde. Das Ereignis KeyboardEvent.KEY_UP wird aufgerufen, wenn eine Taste wieder losgelassen wurde. Um auf ein Ereignis reagieren zu können, kön-nen Sie einen Ereignis-Listener an einem Objekt registrieren, das die Klasse InteractiveObject erweitert. In vielen Fällen wird
SpieleprogrammierungEin erfahrener Projektmanager aus der Computerspielbranche sagte einst sinngemäß den klugen Satz: »Es gibt Anwendungsentwickler, und es gibt Spieleentwickler.« Auf dem Markt gibt es tatsächlich nur wenige Entwickler, die sich pro-fessionell mit beiden Bereichen beschäftigen. Das liegt vermutlich daran, dass sowohl die inhaltliche, strategische als auch die techni-sche Herangehensweise bei der Spieleentwicklung und der An-wendungsentwicklung sehr unter-schiedlich ausfallen.
HinweisViele der nachfolgenden Elemente lassen sich auch in anderen An-wendungsbereichen einsetzen.
Tastaturbefehle deaktivierenUm auf Keyboard-Ereignisse in einem Flash-Film reagieren zu können, der über die Entwick-lungsumgebung getestet wird (Steuerung • Film testen), sollten Sie die Option Steuerelement • Tastaturbefehle deaktivieren im Flash Player aktivieren (am Mac finden Sie die Option unter Steu-erung • Film testen • Steuerung • Tastaturbefehle deaktivieren). Anderenfalls werden einige Tasta-tureingaben nicht registriert.
786 | 20 Spieleprogrammierung
ein solcher Ereignis-Listener an der Bühne (Stage-Objekt) regist-riert, wie im folgenden Beispiel zu sehen ist:
stage.addEventListener(KeyboardEvent.KEY_DOWN,
keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP,
keyUpHandler);
function keyDownHandler(e:KeyboardEvent):void {
trace(e.keyCode + " gedrückt");
}
function keyUpHandler(e:KeyboardEvent):void {
trace(e.keyCode + " losgelassen");
}
Über die Eigenschaft keyCode des an die Ereignisprozedur über-gebenen KeyboardEvent -Objekts können Sie feststellen, welche Taste gedrückt wurde. Wenn Sie beispielsweise auf das Drücken der Pfeil-Tasten reagieren möchten, könnten Sie dazu folgenden Code verwenden:
stage.addEventListener(KeyboardEvent.KEY_DOWN,
keyDownHandler);
function keyDownHandler(e:KeyboardEvent):void {
switch(e.keyCode) {
case 37:
trace("Linke Pfeiltaste");
break;
case 38:
trace("Obere Pfeiltaste");
break;
case 40:
trace("Untere Pfeiltaste");
break;
case 39:
trace("Rechte Pfeiltaste");
break;
}
}
Wenn das Spiel zu Ende ist und Sie die Tastaturabfrage been-den möchten, können Sie die Methode removeEventListener verwenden, um den Ereignis-Listener wieder zu entfernen (vom Objekt zu lösen):
GE Abbildung 20.1Der Menüpunkt Tastaturbefehle deaktivieren
Key-Codes
Die wichtigsten Key-Codes fi nden Sie im Anhang dieses Buches.
20.1 Interaktion | 787
stage.removeEventListener(KeyboardEvent.KEY_DOWN,
keyDownHandler);
20.1.2 MaussteuerungViele aktuelle Flash-Spiele werden über die Maus gesteuert. An verschiedenen Stellen dieses Buches haben Sie bereits Ereignisse kennengelernt, die sich für Maussteuerungen nutzen lassen. Im Folgenden werden noch einmal einige wichtige Mausereignisse exemplarisch erläutert.
Sie können Mausereignisse am Stage-Objekt selbst oder an bestimmten Objekten wie z. B. einem MovieClip registrieren. Wenn Sie Mausereignisse am Stage-Objekt registrieren, können Sie z. B. feststellen, ob der Benutzer die Maustaste an einer beliebi-gen Stelle des Flash-Films gedrückt hat. Registrieren Sie ein Mau-sereignis hingegen an einem Objekt wie z. B. einem MovieClip, wird das Ereignis nur ausgelöst, wenn sich der Mauszeiger über dem Objekt befindet. Angenommen, Sie möchten feststellen, ob der Benutzer die Maustaste an einer beliebigen Stelle innerhalb des Bereichs des Flash-Films gedrückt hat. Dazu können Sie das Ereignis MouseEvent.MOUSE_DOWN wie folgt verwenden:
stage.addEventListener(MouseEvent.MOUSE_DOWN,
mouseDownHandler);
function mouseDownHandler(e:MouseEvent):void {
trace("Maustaste gedrückt.");
}
Um festzustellen, ob die Maustaste über einem bestimmten Objekt gedrückt wurde, können Sie das Ereignis wie folgt nut-zen:
mc.addEventListener(MouseEvent.MOUSE_DOWN,
mouseDownHandler);
function mouseDownHandler(e:MouseEvent):void {
trace("Maustaste über dem Objekt "+e.currentTarget.
name +" gedrückt.");
}
Wenn die Maustaste gleichzeitig gedrückt und bewegt wird, wird das Ereignis erst ausgelöst, wenn die Taste wieder losgelassen wird.
Bei einigen Spielen wie z. B. bei Puzzle-Spielen werden Objekte auf der Bühne mit der Maus verschoben. Um ein Objekt per Drag & Drop zu verschieben, können Sie die Methoden startDrag
Mausrad verwendenÜber das Ereignis MouseEvent.MOUSE_WHEEL können Sie auf die Bewegung des Mausrads reagie-ren (am Mac wird dies nicht un-terstützt). Dazu folgendes Bei-spiel:stage.addEventListener
(MouseEvent.MOUSE_WHEEL,
mouseWheelHandler);
function mouseWheelHandler
(e:MouseEvent):void {
trace(e.delta + " Zeilen
gescrollt.");
}
Mausrad am MacIn Anhang A, »FAQ«, finden Sie einen Workaround, wie Sie Maus-radbewegungen auch am Mac ab-fragen können.
788 | 20 Spieleprogrammierung
und stopDrag in Kombination mit den Mausereignissen MOUSE_DOWN und MOUSE_UP wie folgt verwenden:
mc.addEventListener(MouseEvent.MOUSE_DOWN,
mouseDownHandler);
mc.addEventListener(MouseEvent.MOUSE_UP,
mouseUpHandler);
function mouseDownHandler(e:MouseEvent):void {
e.currentTarget.startDrag();
}
function mouseUpHandler(e:MouseEvent):void {
e.currentTarget.stopDrag();
}
Klickt der Benutzer auf den MovieClip »mc«, wird der Drag-Vor-gang gestartet. Lässt er die Maustaste über dem Objekt wieder los, wird der Drag-Vorgang gestoppt. In der folgenden Tabelle sind die wichtigsten Mausereignisse zusammengefasst.
Ereignis Beispiel Beschreibung
MouseEvent.CLICK mc.addEventListener(MouseEvent.CLICK,
clickHandler);
function clickHandler(e:MouseEvent):void {
trace(e.currentTarget.name+" angeklickt.");
}
Wird ausgelöst, wenn der Benutzer die Maustaste über einem Objekt drückt.
MouseEvent.DOUBLE_CLICK mc.doubleClickEnabled = true;
mc.addEventListener(MouseEvent.DOUBLE_CLICK,
doubleclickHandler);
function doubleclickHandler(e:MouseEvent):
void {
trace(e.currentTarget.name+" per Doppel-
klick angeklickt.");
}
Wird ausgelöst, wenn der Benutzer einen Doppelklick über einem Objekt ausführt. Die Eigenschaft double-ClickEnabled des Objekts muss auf true gesetzt sein.
MouseEvent.MOUSE_DOWN stage.addEventListener(MouseEvent.MOUSE_DOWN,
mouseDownHandler);
function mouseDownHandler(e:MouseEvent):void {
trace("Die Maustaste wurde gedrückt.");
}
Die linke Maustaste wurde über einem Objekt (im Bei-spiel der Bühne) gedrückt.
MouseEvent.MOUSE_UP stage.addEventListener(MouseEvent.MOUSE_UP,
mouseUpHandler);
function mouseUpHandler(e:MouseEvent):void {
trace("Die Maustaste wurde losgelassen.");
}
Die linke Maustaste wurde über einem Objekt (im Beispiel der Bühne) losge-lassen.
Maus außerhalb der BühneÜber das Ereignis Event.MOUSE_LEAVE können Sie feststellen, ob der Mauszeiger aus dem Bereich der Bühne des Flash-Films heraus-bewegt wurde (nur im Browser). Beispiel:stage.addEventListener
(Event.MOUSE_LEAVE,
mouseLeaveHandler);
function mouseLeaveHandler
(e:Event):void {
trace("Mauszeiger hat die
Bühne verlassen.");
}
GE Tabelle 20.1Ereignisse für die Maussteuerung
20.2 Kollisionserkennung | 789
Ereignis Beispiel Beschreibung
MouseEvent.MOUSE_MOVE stage.addEventListener(MouseEvent.MOUSE_MOVE,
mouseMoveHandler);
function mouseMoveHandler(e:MouseEvent):void {
mc.x = mouseX;
mc.y = mouseY;
e.updateAfterEvent();
}
Der Mauszeiger wurde bewegt.
MouseEvent.MOUSE_WHEEL stage.addEventListener(MouseEvent.MOUSE_WHEEL,
mouseWheelHandler);
function mouseWheelHandler(e:MouseEvent):void {
mc.y += e.delta*-1;
}
Wird ausgelöst, wenn das Mausrad der Maus benutzt wurde. (Auf Macs funktio-niert das so direkt nicht.)
MouseEvent.ROLL_OVER mc.addEventListener(MouseEvent.ROLL_OVER,
rollOverHandler);
function rollOverHandler(e:MouseEvent):void {
trace("RollOver: "+e.currentTarget.name);
}
Wird ausgelöst, wenn der Mauszeiger über ein Objekt bewegt wird.
MouseEvent.ROLL_OUT mc.addEventListener(MouseEvent.ROLL_OUT,
rollOutHandler);
function rollOutHandler(e:MouseEvent):void {
trace("RollOut: "+e.currentTarget.name);
}
Wird ausgelöst, wenn der Mauszeiger aus einem Ob-jekt heraus bewegt wird.
GE Tabelle 20.1Ereignisse für die Maussteuerung (Forts.)
20.2 Kollisionserkennung
Ein Hauptbestandteil von vielen Spielen ist die sogenannte Kol-lisionserkennung. Eine präzise Kollisionserkennung ist häufig ein entscheidender Erfolgsfaktor für ein gutes Spiel. Es gibt ver-schiedene Techniken, um Kollisionserkennungen durchzuführen. Einige dieser Techniken werden im Folgenden erläutert.
20.2.1 Einfache Kollisionserkennung mit hitTestObject und hitTestPoint
In ActionScript 3 gibt es für eine einfache Kollisionserkennung die Methoden hitTestObject und hitTestPoint, die die Methode hitTest (ActionScript 1 und 2) abgelöst haben. Die Methoden gehören zur DisplayObject-Klasse und können mit allen Klassen, die die DisplayObject-Klasse erweitern (Sprite, MovieClip, Bit-map etc.), verwendet werden.
KollisionserkennungSinn und Zweck einer Kollisions-erkennung ist es, zu überprüfen, ob ein grafisches Objekt ein oder mehrere andere grafische Objekte berührt oder durchdringt.
790 | 20 Spieleprogrammierung
Kollisionserkennung von Begrenzungsrahmen | Sie können über die Methode hitTestObject überprüfen, ob sich Begren-zungsrahmen von Anzeigeobjekten überschneiden. Bei rechtecki-gen Formen funktioniert das einwandfrei 1. Sobald jedoch eine der Formen nicht rechteckig ist, schlägt die Kollisionserkennung fehl bzw. ist je nach Form mehr oder weniger genau 2. Eine Kollision findet bereits dann statt, wenn sich die Begrenzungsrah-men überschneiden. Da sich aber die Form des Begrenzungsrah-mens und die tatsächliche Form des Objekts unterscheiden, führt das meist zu keinem akzeptablen Ergebnis.
GE Abbildung 20.2Links: Die Formen sind rechteckig, die Kollisionserkennung funktioniert. Rechts: Eine Form ist rund, die Kollisionserkennung ist ungenau.
Angenommen, Sie möchten eine Kollisionserkennung zwischen zwei MovieClips mit den Instanznamen »mc0« und »mc1« durch-führen. Das folgende Beispiel zeigt, wie Sie feststellen können, ob sich die Begrenzungsrahmen berühren oder durchdringen:
mc0.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
function enterFrameHandler(e:Event):void {
e.currentTarget.x = mouseX;
e.currentTarget.y = mouseY;
if(e.currentTarget.hitTestObject(mc1)) {
trace("Kollision");
} else {
trace("Keine Kollision");
}
}
Kollisionserkennung von bestimmten Punkten | Die Methode hitTestPoint bietet eine weitere Möglichkeit für eine Kollisions-erkennung. Mit der Methode können Sie überprüfen, ob die Pixel eines Objekts (die tatsächliche Form) oder der Begrenzungsrah-men eines Objekts mit einem bestimmten Punkt auf der Bühne kollidiert.
Begrenzungsrahmen
Der Begrenzungsrahmen eines MovieClips kann sich von der eigentlichen Form des MovieC-lip-Inhalts unterscheiden. Wenn Sie einen MovieClip in der Ent-wicklungsumgebung auswählen, wird der Begrenzungsrahmen durch einen hellblauen Auswahl-rahmen angezeigt.
a
b
20_Spieleprogrammierung\Kollision_hitTestObject\beispiel.fla
20.2 Kollisionserkennung | 791
Angenommen, Sie möchten überprüfen, ob der Begrenzungs-rahmen eines MovieClips mit dem Instanznamen »mc« mit dem Mittelpunkt der Bühne kollidiert oder nicht. Dazu folgendes Bei-spiel:
mc0.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
function enterFrameHandler(e:Event):void {
var xPos:Number = stage.stageWidth/2;
var yPos:Number = stage.stageHeight/2;
e.currentTarget.x=mouseX;
e.currentTarget.y=mouseY;
if (e.currentTarget.hitTestPoint(xPos,yPos,false)) { trace("Kollision");
} else {
trace("Keine Kollision");
}
}
Die Methode hitTestPoint erwartet drei Argumente:EE x-Koordinate des Punktes auf der BühneEE y-Koordinate des Punktes auf der BühneEE shapeFlag (default: false): Gibt an, ob die Pixel des Objekts
(true) oder der Begrenzungsrahmen des Objekts (false) zur Kollisionserkennung verwendet werden sollen.
Wenn Sie statt des Begrenzungsrahmens die tatsächliche Form des Objekts für die Kollisionserkennung verwenden möchten, müssen Sie den dritten Parameter der Methode auf true setzen. Dazu folgendes Beispiel:
mc0.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
function enterFrameHandler(e:Event):void {
var xPos:Number = stage.stageWidth/2;
var yPos:Number = stage.stageHeight/2;
e.currentTarget.x=mouseX;
e.currentTarget.y=mouseY;
if (e.currentTarget.hitTestPoint(xPos,yPos,true)) { trace("Kollision");
} else {
trace("Keine Kollision");
}
}
20_Spieleprogrammierung\Kollision_hitTestPoint\beispiel_01.fla
20_Spieleprogrammierung\Kollision_hitTestObject\beispiel_02.fla
792 | 20 Spieleprogrammierung
20.2.2 Pixelbasierte KollisionserkennungNeben den bereits vorgestellten Kollisionserkennungen können Sie über die Methode hitTest der BitmapData-Klasse auch eine pixelbasierte Kollisionserkennung durchführen. Eine pixelbasierte Kollisionserkennung ist notwendig, wenn beispielsweise Formen eingesetzt werden, die sich deutlich vom rechteckigen Begren-zungsrahmen eines MovieClips unterscheiden. In einem solchen Fall wäre die zuvor erläuterte Kollisionserkennung zu ungenau. Die Anwendung einer pixelbasierten Kollisionserkennung ist mit-unter etwas kompliziert. Um die Methode hitTest anwenden zu können, sind zunächst folgende zwei Punkte zu beachten:
EE Anzeigeobjekte wie Sprites, MovieClips und auch Bitmaps müssen zunächst in eine BitmapData umgewandelt werden, da die hitTest-Methode eine Methode der BitmapData-Klasse ist und nur auf Objekte dieser Klasse anwendbar ist.
EE Wenn Anzeigeobjekte transformiert, d. h. rotiert, skaliert oder geneigt werden, funktioniert die Kollisionserkennung über hitTest so nicht richtig. Für eine Kollisionserkennung mit transformierten Objekten sind zusätzliche Routinen notwen-dig, die später noch erläutert werden.
Umwandlung von Anzeigeobjekten in eine BitmapDataAngenommen, Sie haben auf der Bühne eines Flash-Films zwei MovieClips erstellt. Der erste MovieClip »myCircle« besitzt eine Kreisform. Der zweite MovieClip »myStar« besitzt eine Stern-form. Auf Basis der Inhalte der MovieClips können Sie wie folgt entsprechende BitmapData-Objekte erzeugen:
1: // Circle
2: var circleRect:Rectangle=myCircle.getBounds(this);
3: var circleBmpData=new BitmapData(circleRect.width,
circleRect.height,true,0);
4: circleBmpData.draw(myCircle);
5: // Star
6: var starRect:Rectangle=myStar.getBounds(this);
7: var starBmpData=new BitmapData(starRect.width,
starRect.height,true,0);
8: starBmpData.draw(myStar);
In Zeile 2 wird der Begrenzungsrahmen des MovieClips »my Circle« über die Methode getBounds ermittelt und der Variablen circle Rect zugewiesen. In Zeile 3 wird ein neues BitmapData-Objekt erzeugt. Die Breite und die Höhe des BitmapData-Objekts werden auf Basis der Breite und der Höhe des zuvor definierten
AnmerkungDa es sich um eine pixelbasierte Kollisionserkennung handelt, kön-nen die beiden MovieClips des Beispiels natürlich auch andere beliebige Vektorformen bein-halten.
Registrierungspunkte der MovieClipsDie Registrierungspunkte der bei-den MovieClips in diesem Beispiel müssen links oben sein.
20.2 Kollisionserkennung | 793
Rectangle-Objekts festgelegt. Der Hintergrund der BitmapData wird auf transparent (true) gesetzt. Die Hintergrundfarbe wird auf Schwarz (0) festgelegt.
Anschließend werden in Zeile 4 über die Methode draw die Pixel des MovieClips »myCircle« in die BitmapData übernommen (nachgezeichnet). Es wird also eine visuelle Kopie des Inhalts des MovieClips »myCircle« in der BitmapData gespeichert. In Zeile 6 bis 8 wird analog dazu die Sternform in eine BitmapData starBmpData übertragen.
Kollisionserkennung mit hitTest | Die Methode hitTest der BitmapData-Klasse hat folgende formelle Syntax:
firstObject.hitTest(firstPoint:Point,
firstAlphaThreshold:uint, secondObject:Object,
secondBitmapDataPoint:Point = null,
secondAlphaThreshold:uint = 1):Boolean
Die Methode wird von einem der beiden Objekte aufgerufen, die auf eine Kollision hin überprüft werden (hier: firstObject). Die Methode sieht fünf Parameter vor:
EE firstPoint: der Punkt der linken oberen Ecke des ersten Anzei-geobjekts
EE firstAlphaThreshold: der niedrigste Alphawert des ersten Objekts, der bezüglich der Kollisionserkennung als deckend (undurchsichtig) bewertet wird
EE secondObject: Das zweite Objekt, auf das die Kollisionserken-nung angewendet wird. Zum Beispiel ein Rectangle-, Point-, Bitmap- oder BitmapData-Objekt.
EE secondBitmapDataPoint: der Punkt der linken oberen Ecke des zweiten Anzeigeobjekts
EE secondAlphaThreshold: der niedrigste Alphawert des zweiten Objekts, der bezüglich der Kollisionserkennung als deckend (undurchsichtig) bewertet wird
Übertragen auf das zuvor beschriebene Beispiel, lässt sich die Methode hitTest wie folgt anwenden, um eine pixelbasierte Kollisionserkennung durchzuführen:
1: addEventListener(Event.ENTER_FRAME,
enterFrameHandler);
2: function enterFrameHandler(e:Event):void {
3: myStar.x=mouseX;
4: myStar.y=mouseY;
getBoundsDie Methode getBounds gibt den Begrenzungsrahmenbereich des angegebenen Anzeigeobjekts zu-rück. Der zurückgegebene Wert bezieht sich auf das Koordinaten-system, das als Argument (in die-sem Beispiel: this) an die Me-thode übergeben wird.
794 | 20 Spieleprogrammierung
5: var starPoint:Point=new Point(myStar.x,myStar.y);
6: var circlePoint:Point=new Point(myCircle.x,
myCircle.y);
7: if (starBmpData.hitTest(starPoint,255,circleB
mpData,circlePoint,255)) {
8: trace("hit");
9: myCircle.alpha=0.5;
10: } else {
11: myCircle.alpha=1;
12: }
13: }
Zunächst wird an der Bühne in Zeile 1 ein ENTER_FRAME-Ereignis-Listener registriert. Der »Stern«-MovieClip wird auf die Koordi-naten des Mauszeigers positioniert (Zeile 3 und 4). Es werden zwei Point-Objekte mit den Koordinaten der jeweiligen Movie-Clips initialisiert (Zeile 5 und 6). In Zeile 7 wird dann mithilfe der hitTest-Methode die Kollisionserkennung durchgeführt. Der Wert des firstAlphaThreshold entspricht hier 255 (gleich 0xFF), also dem Alphawert 1. Farbtöne mit niedrigerem Alpha-wert werden nicht berücksichtigt. Findet eine Kollision statt, wird der Alphawert des »Kreis«-MovieClips auf 0,5 gesetzt. Anderen-falls wird der Alphawert auf 1 gesetzt. Das vollständige Beispiel fi nden Sie auf der DVD im Verzeichnis 20_Spieleentwicklung\Kol-lision_hitTest\Kollision_hitTest.fla.
Pixelbasierte Kollisionserkennung mit transformierten Ob -jekten | Wie zuvor erwähnt, lässt sich die pixelbasierte Kollisi-onserkennung so nicht auf transformierte Objekte anwenden. Sie können das selbst überprüfen, wenn Sie beispielsweise den Kreis-MovieClip vor der Kollisionserkennung wie folgt skalieren (die Kollisionserkennung ist dann sehr ungenau):
myCircle.scaleX = 0.5;
myCircle.scaleY = 0.5;
Abbildung 20.3E E
Die beiden Anzeigeobjekte kollidieren.
20_Spieleprogrammierung\Kollision_hitTest\Kollision_hitTest.fla
20.2 Kollisionserkennung | 795
Damit die Kollisionserkennung auch mit Objekten funktioniert, die zur Laufzeit transformiert wurden bzw. werden, müssen einige Änderungen am Code vorgenommen werden. Die wesent-liche Änderung ist, dass hier eine Transformationsmatrix für beide Anzeigeobjekte defi niert wird und diese dann bei der Generie-rung der jeweiligen BitmapData an die Methode draw überge-ben wird. Das bewirkt, dass Transformationen in die BitmapData übernommen und dort berücksichtigt werden.
Damit Transformationen zur Laufzeit berücksichtigt werden können, muss im Gegensatz zum vorangegangenen Beispiel die jeweilige BitmapData der Anzeigeobjekte wiederholt zur Lauf-zeit generiert werden. Der folgende Code zeigt die Anwendung (wichtige Codestellen sind fett gesetzt):
1: addEventListener(Event.ENTER_FRAME,
enterFrameHandler);
2: function enterFrameHandler(e:Event):void {
3: // Circle
4: var circleRect:Rectangle=myCircle.
getBounds(this);
5: var circleBmpData=new BitmapData(circleRect.
width,circleRect.height,true,0);
6: var circleOffset:Matrix = myCircle.transform.
matrix;
7: circleOffset.tx = myCircle.x - circleRect.x;
8: circleOffset.ty = myCircle.y - circleRect.y;
9: circleBmpData.draw(myCircle,circleOffset);
10: // Star
11: var starRect:Rectangle=myStar.getBounds(this);
12: var starBmpData=new BitmapData(starRect.
width,starRect.height,true,0);
13: var starOffset:Matrix = myStar.transform.
matrix;
14: starOffset.tx = myStar.x - starRect.x;
15: starOffset.ty = myStar.y - starRect.y;
FE Abbildung 20.4Die Kollisionserkennung funktio-niert nicht richtig mit transfor-mierten Objekten.
BitmapData.disposeDie Methode dispose der Bit-mapData-Klasse sorgt dafür, dass der von der BitmapData verwen-dete Speicher freigegeben wird. Die Breite und Höhe der Bitmap-Data werden dabei auf »0« zu-rückgesetzt. In dem gezeigten Beispiel wird die Methode ange-wendet, nachdem die Kollisions-erkennung durchgeführt wurde. Da die BitmapData-Objekte bei jedem Durchlauf neu initialisiert werden, ist es sinnvoll, den Speicher dann auch wieder frei-zugeben.
796 | 20 Spieleprogrammierung
16: starBmpData.draw(myStar,starOffset);
17: myStar.x=mouseX;
18: myStar.y=mouseY;
19: myStar.scaleX = myStar.scaleY = 0.5;
20: var starPoint:Point=new Point(myStar.x,myStar.y);
21: var circlePoint:Point=new Point(myCircle.x,
myCircle.y);
22: if (starBmpData.hitTest(starPoint,255,circleB
mpData,circlePoint,255)) {
23: trace("hit");
24: myCircle.alpha=0.5;
25: } else {
26: myCircle.alpha=1;
27: }
28: starBmpData.dispose();
29: circleBmpData.dispose();
30: }
Das Beispiel fi nden Sie auf der DVD im Verzeichnis 20_Spiele-entwicklung\Kollision_hitTest_transformed\Kollision_hitTest_trans-formed.fla.
20.2.3 Positionsbasierte Kollisionserkennung Sie haben jetzt verschiedene Techniken zur Kollisionserkennung zwischen Objekten bzw. Punkten kennengelernt. Häufi g gibt es einen fest defi nierten Spielbereich, in dem sich Objekte bewe-gen. Kollidiert ein Objekt mit einem Rand des Bereichs, wie z. B. mit den Rändern der Bühne, wird es entweder entfernt oder es ändert seine Bewegungsrichtung. Für diese Art der Kollisionser-kennung ist es wichtig, den Registrierungspunkt eines MovieClips zu berücksichtigen. Angenommen, ein Rechteck wird in einen MovieClip »mc« umgewandelt. Der Registrierungspunkt wird bei der Konvertierung auf links oben eingestellt 1.
Abbildung 20.5E E
Jetzt funktioniert die Kollisionser-kennung auch mit transformierten Objekten.
20_Spieleprogrammierung\Kollision_hitTest_transformed\Kollision_hitTest_transformed.fla
20.2 Kollisionserkennung | 797
Um abzufragen, ob der MovieClip den linken Rand eines Bereichs überschreitet, müssen Sie einfach die x-Position des MovieClips 2 mit der x-Position des linken Rands vergleichen 3. Wenn der Spielbereich der Bühne entspricht, wäre folgende Abfrage sinnvoll:
if(mc.x < 0) {
// Der linke Randbereich wurde überschritten.
}
Wenn Sie prüfen möchten, ob sich der MovieClip 4 über die rechte Seite des Randbereichs 5 bewegt hat, müssen Sie die Breite des MovieClips zur Position des MovieClips hinzuaddieren und das Resultat mit der Position des rechten Randbereichs vergleichen:
if(mc.x+mc.width > stage.stageWidth) {
// Der rechte Randbereich wurde überschritten.
}
rechts:
links:mc.x
0
mc.x
0
mc.x+mc.width
stage.stageWidth
mc.x+mc.width
stage.stageWidth
Analog dazu müssen Sie für eine Kollisionsabfrage mit dem obe-ren Rand ausschließlich die y-Koordinaten vergleichen:
if(mc.y < 0) {
// Der obere Randbereich wurde überschritten.
}
FE Abbildung 20.6Registrierung des MovieClips
FE Abbildung 20.7Kollisionserkennung mit linkem und rechtem Randbereich
1
b
c
d
e
798 | 20 Spieleprogrammierung
Für eine Kollisionserkennung mit dem unteren Rand müssen Sie zur y-Position die Höhe des MovieClips dazurechnen:
if(mc.y+mc.height > stage.stageHeight) {
// Der untere Randbereich wurde überschritten.
}
mc.y+mc.height
stage.stageHeight
mc.y+mc.height
unten:
oben:
mc.y0 mc.y 0
stage.stageHeight
Je nach Spiel und Spielelement fällt die Reaktion auf eine Kol-lision unterschiedlich aus. Eine Reaktion wäre, dass ein Objekt abprallt und sich anschließend in die entgegengesetzte Richtung bewegt. Der englische Begriff für ein solches Verhalten ist Boun-cing (engl. für »abprallen«).
Angenommen, ein MovieClip bewegt sich mit einer konstan-ten Geschwindigkeit vx mithilfe eines Event.ENTER_FRAME-Ereig-nisses Bild für Bild um jeweils fünf Pixel nach rechts 1. Beim Ren-dern des nächsten Bildes wird das Objekt mit einem Randbereich kollidieren – dabei wird es sich sogar über den Bereich hinaus-bewegen 2. Für das Bouncing wird daraufhin wie folgt reagiert:1. Zunächst positionieren Sie den MovieClip genau am entspre-
chenden Kollisionsbereich 3.2. Dann ändern Sie die Bewegungsrichtung, indem Sie die
Geschwindigkeit mit –1 multiplizieren 4. Entsprach die Geschwindigkeit vx vor der Kollision 5, wird sie nach der Neu-positionierung auf –5 gesetzt. Der MovieClip bewegt sich also anschließend nach links in die entgegengesetzte Richtung.
vx = 5;mc.x+=vx;
vx = 5*-1;mc.x+=vx;
3px
Abbildung 20.8E E
Kollision mit oberem und unterem Randbereich
Abbildung 20.9E E
Das Bouncing-Prinzip
a
b 3 d
20.3 Zeit | 799
Schritt für Schritt: Kollisionserkennung mit Randbereichen und BouncingDer Workshop erläutert, wie Sie eine Kollisionserkennung mit den Randbereichen der Bühne durchführen können und wie Sie auf eine mögliche Kollision mit Bouncing reagieren.
1 Flash-Film öffnenÖffnen Sie den Flash-Film 20_Spieleprogrammierung\Kollision_Randbereiche\KollisionRandbereiche_01.fla.
2 Kollisionserkennung und BouncingWeisen Sie dem ersten Schlüsselbild auf der Ebene »Actions« fol-genden Code zu:
var vx:Number=5;
var vy:Number=3;
var links:Number=0;
var rechts:Number=stage.stageWidth-mc.width;
var oben:Number=0;
var unten:Number=stage.stageHeight-mc.height;
mc.addEventListener(Event.ENTER_FRAME,moveClip);
function moveClip(e:Event):void {
e.currentTarget.x+=vx;
e.currentTarget.y+=vy;
if (e.currentTarget.x<links||e.currentTarget.x>rechts) {
vx*=-1;
}
if (e.currentTarget.y<oben||e.currentTarget.y>unten) {
vy*=-1;
}
}
Sobald der MovieClip einen Randbereich überschreitet, wird die Bewegungsrichtung durch Multiplikation mit –1 umgekehrt.
3 Film testenTesten Sie den Flash-Film über (Strg)/(°)+(¢). N
20.3 Zeit
Viele Spiele sind zeitlich begrenzt oder haben zumindest eine Zeit-anzeige. Beides lässt sich über die sogenannte getTimer-Funktion umsetzen. Die Funktion gibt die Zeit in Millisekunden zurück, die
20_Spieleprogrammierung\Kollision_Randbereiche\Kollision-Randbereiche_01.fla
Ergebnis der Übung:20_Spieleprogrammierung\Kollision_Randbereiche\Kollision-Randbereiche_02.fla
800 | 20 Spieleprogrammierung
seit dem Start des Flash-Films vergangen ist. Angenommen, Sie möchten in einem Spiel die abgelaufene Zeit anzeigen. Hierfür müssten Sie zunächst am Anfang die Zeit ermitteln, die seit dem Start des Flash-Films bis zu diesem Zeitpunkt vergangen ist. Die Zeit wird dann z. B. der Variablen time0 zugewiesen:
var time0:Number = getTimer();
Dann könnten Sie z. B. mithilfe des Ereignisses Event.ENTER_FRAME der Bühne (Stage-Objekt) die abgelaufene Zeit wie folgt ermitteln; die Differenz der beiden Zeitwerte entspricht dann der abgelaufenen Zeit:
var time0:Number=getTimer();
stage.addEventListener(Event.ENTER_FRAME,getTime);
function getTime(e:Event):void {
var time1:Number=getTimer();
var zeit:Number=time1-time0;
trace(zeit);
}
Um die Zeit abgerundet in Sekunden anzuzeigen, müssen Sie die Zeit durch 1.000 dividieren und über Math.floor runden:
var zeit:Number = Math.floor((time1-time0)/1000);
Zeitlimit | Angenommen, Sie möchten die Spielzeit auf 100 Sekunden begrenzen. Ist die Spielzeit verstrichen, soll das Spiel beendet werden. Ermitteln Sie dazu einfach die Differenz zwi-schen abgelaufener Zeit und dem gewünschten Zeitlimit wie folgt:
var timeLimit:Number = 100;
var time0:Number=getTimer();
stage.addEventListener(Event.ENTER_FRAME,getTime);
function getTime(e:Event):void {
var time1:Number=getTimer();
var zeit:Number = Math.floor((time1-time0)/1000);
var restzeit:Number = timeLimit-zeit;
trace("Es bleiben noch: "+restzeit+" Sekunden.");
if(restzeit <0) {
stage.removeEventListener(Event.ENTER_FRAME.
getTime);
}
}
Alternative
Anstatt eines Event.ENTER_FRAME-Ereignisses, das sich nach der Bildrate eines Flash-Films richtet, können Sie auch ein Ti-mer-Objekt verwenden, um die abgelaufene Zeit zu ermitteln. Dazu folgendes Beispiel:
var time0:Number=getTimer();
var myTimer:Timer = new
Timer(100,int.MAX_VALUE);
myTimer.addEventListener
(TimerEvent.TIMER,getTime);
myTimer.start();
function getTime(e:Event):
void {
var time1:Number=getTimer();
var zeit:Number = Math.
floor((time1-time0)/1000);
trace(zeit);
}
20.4 Daten lokal speichern mit einem SharedObject | 801
Sollte der Wert der Variablen restzeit unter 0 fallen, wird der zuvor registrierte Ereignis-Listener wieder entfernt. Das führt dazu, dass die Funktion getTime dann nicht mehr weiter aufge-rufen wird.
20.4 Daten lokal speichern mit einem SharedObject
In vielen Spielen lässt sich zu Beginn, z. B. für einen Highscore, ein Spielername eingeben. Damit der Spielername und gegebe-nenfalls weitere Daten nicht bei jedem Neustart neu eingegeben werden müssen, lassen sich Daten über ein SharedObject lokal auf dem Client-Rechner speichern. Ein SharedObject funktioniert ähnlich wie ein Browser-Cookie .
Größe des lokalen Speichers | Sie sollten jedoch beachten, dass der Flash Player die Datenmenge standardmäßig auf 100 KB begrenzt. Der Benutzer kann die Limitierung des verfügbaren Speichers selbst erhöhen, reduzieren oder die Nutzung von loka-lem Speicher vollständig unterbinden.
Die entsprechenden Einstellungen fi nden Sie im Kontextmenü des Flash Players. Öffnen Sie also einen Flash-Film, klicken Sie mit der rechten Maustaste, um das Kontextmenü zu öffnen, und wählen Sie den Menüpunkt Einstellungen 1.
Im Reiter Lokaler Speicher 4 lässt sich sowohl die erlaubte Speichermenge zur Speicherung der Daten durch Verschieben
des Reglers 2 limitieren als auch die Speicherung durch Aktivierung des Optionsfelds Nie 3 gänz-lich abschalten. Sollte der Benutzer die Speichermög-lichkeit deaktivieren, funk-tioniert das Speichern von Daten über ein Shared-Object nicht mehr.
Weitere AnwendungsbereicheSharedObjects werden häufi g auch zum Speichern von Daten für Offl ine-Anwendungen (CD, DVD, USB etc.) genutzt. Ein SharedObject lässt sich beispiels-weise auch dazu verwenden, ei-nen Highscore lokal auf einem System, z. B. bei einem Spiel für CD/DVD, zu speichern. Ein Share-dObject lässt sich natürlich nicht nur für Spiele nutzen. Sie können beliebige Daten, z. B. Daten eines Adressbuchs, lokal speichern.
FE Abbildung 20.10Das Kontextmenü Einstellungen
Weitere Einstellungsmöglich-keiten
In dem Dialogfenster Einstel-lungen für Adobe Flash Player können Sie zusätzlich einstellen, ob Sie dem Flash-Film den Zu-griff auf Ihr Mikrofon und Ihre Webcam erlauben oder nicht.
GE Abbildung 20.11Einstellungen für den lokalen Speicher
b
c
d
802 | 20 Spieleprogrammierung
Private Browsing im Flash Player 10.1
Seit dem Flash Player 10.1 wird das PrivateBrowsing (engl. für »priva-tes Surfen«) des Browsers berück-sichtigt. Das hat zur Folge, dass der Flash Player im Browser, der den privaten Modus angeschaltet hat, SharedObjects nach Verlassen des privaten Modus automatisch verwirft.
Sie müssen also zukünftig verstärkt damit rechnen, dass SharedObjects gegebenenfalls nicht vorhanden sind. Folgende Browser unterstüt-zen aktuell den privaten Modus:
EE Internet Explorer 8.0EE Mozilla Firefox 3.5EE Apple Safari 2.0EE Google Chrome 1.0
SharedObject initialisierenBevor Sie Daten lokal speichern können, müssen Sie zunächst ein SharedObject initialisieren und referenzieren. Dazu dient die Methode getLocal, die als Argument einen Bezeichner erwartet, unter dem die Daten lokal gespeichert werden:
var data_so:SharedObject = SharedObject.
getLocal("data");
Falls das lokal gespeicherte SharedObject data nicht bereits exis-tiert, wird es automatisch erzeugt. Anschließend können Sie dem Objekt über die Eigenschaft data Daten zuweisen:
data_so.data.spielername = "Max";
Damit die Daten sofort auf der Festplatte gespeichert werden, müssen Sie anschließend die Methode flush des SharedObjects aufrufen. Anderenfalls werden die Daten erst auf die Festplatte geschrieben, wenn die Verbindung zum lokalen Objekt beendet wird, z. B. wenn der Flash-Film gestoppt wird:
data_so.flush();
Über die Methode clear können Sie alle Daten eines SharedOb-jects auch wieder entfernen:
data_so.clear();
Lokale Daten lesen | Um Daten eines SharedObjects zu lesen, müssen Sie es zunächst wieder referenzieren:
var data_so:SharedObject = SharedObject.
getLocal("data");
SOL-DateienDaten, die lokal über ein Shared-Object gespeichert werden, wer-den auf der Festplatte in Dateien mit der Dateiendung .sol abge-legt. SOL-Dateien lassen sich be-quem über spezielle Editoren wie z. B. SolVE (http://solve.source-forge.net/) für Windows/Mac ein-sehen und editieren.
Datenmenge bestimmen
Über die Eigenschaft size eines SharedObjects können Sie die bereits gespeicherte Daten-menge (in Bytes) bestimmen
trace(data_so.size);
Um diese in KB umzurechnen, müssen Sie den Wert durch 1.024 dividieren:
var mySize:Number = data_
so.size/1024;
trace(mySize);
20.4 Daten lokal speichern mit einem SharedObject | 803
Anschließend können Sie auf mögliche Eigenschaftswerte der Eigenschaft data wie folgt zugreifen:
trace(data_so.data.spielername);
Übrigens können Sie auch Werte anderer Datentypen als String speichern. So könnten Sie z. B. ein Array userdata inklusive aller Array-Felder speichern und auslesen. Dazu folgendes Beispiel:
var data_so:SharedObject = SharedObject.
getLocal("data");
var userdata:Array = new Array({spielername:"Max",
punkte:100,spielername:"John",punkte:1000});
data_so.data.user_arr = userdata;
data_so.flush();
trace(data_so.data.user_arr[0].spielername);
Schritt für Schritt: Spielername lokal speichern und lesenIn diesem Workshop wird gezeigt, wie Sie Daten mithilfe eines SharedObjects lokal speichern und auslesen können.
1 Film öffnenÖffnen Sie den Flash-Film 20_Spieleprogrammierung\SharedOb-ject\SharedObject_01.fla.
2 Daten lokal speichernWeisen Sie dem ersten Schlüsselbild auf der Ebene »Actions« zunächst folgenden Code zu:
weiter_mc.buttonMode = true;
weiter_mc.addEventListener(MouseEvent.CLICK,clickHandler);
function clickHandler(e:MouseEvent):void {
if(input_txt.text != "") {
writeData();
gotoAndStop(2);
}
}
function writeData():void {
var data_so:SharedObject = SharedObject.
getLocal("data");
data_so.data.spielername = input_txt.text;
data_so.flush();
}
20_Spieleprogrammierung\SharedObject\SharedObject_01.fla
804 | 20 Spieleprogrammierung
In einem Eingabetextfeld können Sie einen Spielernamen ein-geben, der dann per Mausklick auf den MovieClip »weiter_mc« lokal in einem SharedObject gespeichert wird.
3 Daten auslesen und ausgebenDamit der Spielername automatisch im Eingabetextfeld erscheint, wird er über die Funktion readData, falls vorhanden, ausgele-sen. Ergänzen Sie den Code dazu im ersten Schlüsselbild auf der Ebene »Actions« wie folgt:
function readData():void {
var data_so:SharedObject = SharedObject.
getLocal("data");
if (data_so.data.spielername != undefined) {
input_txt.text = data_so.data.spielername;
}
}
readData();
stop();
4 Zurück auf Bild 1 springenWählen Sie das zweite Schlüsselbild auf der Ebene »Actions« aus, und weisen Sie ihm folgenden Code zu:
back_mc.buttonMode = true;
back_mc.addEventListener(MouseEvent.CLICK,goBack);
function goBack(e:MouseEvent):void {
gotoAndStop(1);
}
stop();
5 Film testenTesten Sie den Flash-Film über (Strg)/(°)+(¢). N
20.5 Asteroids -Spiel
Sie haben jetzt einige Grundlagen kennengelernt, die Ihnen bei der Spieleprogrammierung helfen können. Je nach Spielprinzip eines Spiels werden Sie verschiedene Aufgaben lösen und sich mit weiteren Techniken, die hier nicht erläutert wurden, beschäf-tigen.
Um diesen Themenbereich abzuschließen, wird im Folgenden gezeigt, wie Sie mit einfachen Mitteln ein vollständiges Spiel ent-
Spielspaß und Spieltechnik
Wenn Sie vorhaben, selbst ein Spiel zu entwickeln, nehmen Sie sich die Zeit, vorher darüber nachzudenken, welche Techni-ken für die Umsetzung erforder-lich sind. Vermeintlich einfache Spiele wie z. B. ein Tetris-Clone erfordern eventuell komplexere Techniken, als zunächst ange-nommen. Die Komplexität der Technik hat meist nicht viel mit dem resultierenden Spielspaß zu tun. Technisch einfache Spiele können ebenso viel Spaß ma-chen wie Spiele, die komplexe Techniken einsetzen.
GE Abbildung 20.12Der eingegebene Spielernamen erscheint auch nach einem Neu-start des Flash-Films, bis Sie ihn wieder im Eingabetextfeld ändern.
Ergebnis der Übung:20_Spieleprogrammierung\Shared-Object\SharedObject_02.fla
20.5 Asteroids-Spiel | 805
wickeln können. Dabei lernen Sie nicht nur die zuvor genannten Erläuterungen in der Praxis anzuwenden, sondern u. a. auch, wie Sie die Struktur für ein Spiel anlegen können. Ergänzend dazu wird am Ende erläutert, wie sich ein Highscore für ein Spiel erstellen lässt.
20.5.1 StartbildschirmZunächst wird der Startbildschirm erstellt, über den der Spieler seinen Spielernamen festlegen kann. Alle grafischen Elemente des Spiels und die Struktur des Flash-Films wurden bereits an gelegt. Öffnen Sie den Flash-Film 20_Spieleprogrammierung\Asteroid\Asteroids_01.fla.
Weisen Sie dem ersten Schlüsselbild auf der Ebene »Actions« zunächst folgenden Code zu:
1: var username:String;
2: start_mc.buttonMode=true;
3: start_mc.addEventListener(MouseEvent.CLICK,
clickHandler);
4: function clickHandler(e:MouseEvent):void {
5: if (name_txt.text!="" && name_txt.length>1) {
6: username=name_txt.text;
7: gotoAndStop("Spiel");
8: }
9: }
Als Erstes wird in Zeile 1 die Variable username initialisiert, der in Zeile 6, sobald der Spieler einen Namen in das Textfeld »name_
20_Spieleprogrammierung\Asteroid\Asteroids_01.fla
FEGE Abbildung 20.13Die Ausgangsbasis
806 | 20 Spieleprogrammierung
txt« eingetragen hat, der Spielername zugewiesen wird. Sobald der Spieler einen Spielernamen eingegeben hat und auf den MovieClip mit dem Instanznamen »start_mc« klickt, springt der Lesekopf der Hauptzeitleiste auf das Bild mit dem Bildbezeichner Spiel (Zeile 7).
20.5.2 Soundobjekte initialisierenIn der Bibliothek im Ordner Sounds finden Sie verschiedene Sounds, die jeweils mit einer Klasse verknüpft wurden. So wurde der Sound explosion.wav beispielsweise mit der Klasse Explo-sion verknüpft. Sie können den Sound dann über ein Objekt der Klasse mit ActionScript ansteuern. Ergänzen Sie den Code im ers-ten Schlüsselbild der Ebene »Actions« um folgende Zeilen:
1: // Sounds
2: var myLoop:Loop = new Loop();
3: myLoop.play(0,int.MAX_VALUE);
4: var myGunSound:GunSound = new GunSound();
5: var myExplosion:Explosion = new Explosion();
6: var myEnergySound:EnergySound = new EnergySound();
7: stop();
Soundobjekte von unterschiedlichen Klassen werden an dieser Stelle einmalig initialisiert. Sie werden später beim Auftreten eines Spielereignisses abgespielt. Zu Beginn wird in Zeile 2 ein Objekt der Klasse Loop initialisiert, und der Sound wird über die Methode play gestartet (Zeile 3). Es handelt sich dabei um einen Soundloop, der als Hintergrundmusik dient.
20.5.3 Spielvariablen initialisierenIm Bild mit dem Bildbezeichner Spiel wird die Logik des Spiels integriert. Wählen Sie das Schlüsselbild auf der Ebene »Actions« in Bild 10 aus, und weisen Sie dem Schlüsselbild zunächst folgen-den Code zu:
1: // Init
2: var xFighterHealth:Number=1;
3: var gunPower:Number=1;
4: var punkte:uint=0;
Zu Beginn werden einige Spielvariablen initialisiert:EE xFighterHealth: Die Lebenspunkte des Raumschiffs; der
Wert 1 entspricht vollen Lebenspunkten, bei 0 wird das Spiel beendet.
SoundkomprimierungDie Soundkomprimierung des Flash-Films wurde in den Veröf-fentlichungseinstellungen des Flash-Films auf MP3, 80 kbit/s (Mono) eingestellt.
Mauszeiger ausblenden
Alternativ können Sie an dieser Stelle den Mauszeiger auch aus-blenden. Ergänzen Sie den Code dafür um die Zeile:
Mouse.hide ();
20.5 Asteroids-Spiel | 807
EE gunPower: Das Raumschiff besitzt nur eine begrenzte Menge an Energie. Energie wird benötigt, um Schüsse abzugeben (der Wert 1 ist der maximale Wert). Nach jedem Schuss verringert sich der Wert. Er wird später automatisch nach einiger Zeit wieder aufgeladen.
EE punkte: die aktuelle Punktzahl der Spielsession
20.5.4 RaumschiffsteuerungAuf der Ebene »xFighter« in Bild 10 befindet sich ein Movie Clip mit einem gleichnamigen Instanznamen. Dieser wird über die Maus gesteuert. Ergänzen Sie den Code im zehnten Schlüsselbild um folgende Zeilen:
1: //xFighter-Steuerung
2: xFighter.addEventListener(Event.ENTER_FRAME,
posFighter);
3: function posFighter(e:Event):void {
4: var dx:Number=stage.mouseX-e.currentTarget.x;
5: var dy:Number=stage.mouseY-e.currentTarget.y;
6: var easeFaktor:Number=8;
7: e.currentTarget.x+=dx/easeFaktor;
8: e.currentTarget.y+=dy/easeFaktor;
9: if (stage.mouseY<e.currentTarget.y) {
10: e.currentTarget.fireBack.gotoAndStop(2);
11: } else {
12: e.currentTarget.fireBack.gotoAndStop(1);
13: }
14: }
Über das Ereignis Event.ENTER_FRAME wird das Raumschiff anhand der Mausposition mehrmals pro Sekunde in Abhängigkeit von der Bildrate bewegt. Es wird mit einer leichten Verzögerung immer in Richtung der aktuellen Mausposition verschoben (Zeile 4 bis 8).
Innerhalb des MovieClips »xFighter« befindet sich ein Movie-Clip mit dem Instanznamen »fireBack«, der den Antrieb des Raumschiffs darstellt. Wenn sich der Mauszeiger oberhalb des Raumschiffs befindet (Zeile 9), sich das Raumschiff also nach oben bewegt, wird der hintere Antrieb des Raumschiffs gezün-det. Dazu springt der Lesekopf der Zeitleiste des MovieClips »fireBack« dann auf Bild 2 (Zeile 10). Befindet sich der Maus-zeiger hingegen unterhalb des Raumschiffs (Zeile 11), wird der Antrieb deaktiviert. Dazu springt der Lesekopf dann wieder auf Bild 1 zurück (Zeile 12).
TastatursteuerungEs ist nicht besonders aufwendig, das Raumschiff auch über die Tas-tatur steuern zu können. Nach-dem Sie das Spiel fertiggestellt haben, probieren Sie den Code selbstständig zu ergänzen.
Verzögerung einstellenSie können den easeFaktor in Zeile 6 ändern, um die Verzöge-rung der Bewegung zu ändern. Je höher Sie den Wert stellen, desto größer wird die Verzögerung.
Steuerung des AntriebsDie Steuerung des Antriebs dient ausschließlich zur Visualisierung.
Alternativer Antrieb
Der Antrieb ist sehr einfach gestaltet. Sie können auch eine Animationssequenz verwenden, um das Beispiel visuell etwas aufzuwerten.
808 | 20 Spieleprogrammierung
GE Abbildung 20.14Die Zustände des Raum schiff antriebs
20.5.5 Feuer freiIn der Bibliothek des Flash-Films befi ndet sich ein MovieClip, der mit der Klasse GunFire verknüpft ist. Der MovieClip stellt den Laserschuss des xFighters dar. Klickt der Benutzer auf die Maus-taste, soll das Raumschiff einen Schuss abgeben. Ergänzen Sie den Code in Schlüsselbild 10 dazu um folgende Zeilen:
1: // Gun
2: var fireArray:Array = new Array();
3: stage.addEventListener(MouseEvent.MOUSE_DOWN,
fireGun);
4: function fireGun(e:MouseEvent):void {
5: if (gunPower-0.2>=0) {
6: var fire:GunFire = new GunFire();
7: fire.x=xFighter.x;
8: fire.y=xFighter.y-16;
9: fire.myIndex=fireArray.length;
10: addChild(fire);
11: fireArray.push(fire);
12: fire.addEventListener(Event.ENTER_FRAME,
fireMove);
13: gunPower-=0.2;
14: gunPowerDisplay.bar.scaleX=gunPower;
15: var mySoundChannel:SoundChannel=
myGunSound.
play(0,1);
16: var mySoundTransform:SoundTransform=new
SoundTransform(0.3);
17: mySoundChannel.soundTransform=
mySoundTrans form;
18: }
19: }
20: function fireMove(e:Event):void {
21: e.currentTarget.y-=10;
GE Abbildung 20.15Der MovieClip »GunFire« ist mit der Klasse GunFire verknüpft.
20.5 Asteroids-Spiel | 809
22: if (fireArray.length>20) {
23: fireArray.splice(0,5);
24: }
25: if (e.currentTarget.y<0) {
26: e.currentTarget.removeEventListener(Event.
ENTER_FRAME,fireMove);
27: removeChild(DisplayObject(e.currentTarget));
28: fireArray.splice(e.currentTarget.myIndex,1);
29: }
30: }
Zunächst wird in Zeile 2 ein Array initialisiert, dem später Instan-zen der Klasse GunFire zugewiesen werden. Führt der Benutzer einen Mausklick aus (Zeile 3), wird die Funktion fireGun aufge-rufen.
Die Funktion überprüft zunächst, ob das Raumschiff noch genügend Energie besitzt, um einen weiteren Schuss abzugeben (Zeile 5). Ist das der Fall, wird ein Objekt der Klasse GunFire ini-tialisiert (Zeile 6), und das Objekt wird positioniert (Zeile 7 und 8). Um den Feldindex des Objekts im Array fireArray und damit das Objekt selbst später eindeutig ermitteln zu können, wird der (dynamischen) Eigenschaft myIndex des MovieClips die aktuelle Länge des Arrays fireArray zugewiesen (Zeile 9). So entspricht der Wert der Eigenschaft myIndex dem Index des Feldes, über das das aktuelle GunFire-Objekt referenziert werden kann.
Das Objekt wird zum Array fireArray hinzugefügt (Zeile 11). Am Objekt wird ein Ereignis-Listener für das Ereignis Event.ENTER_FRAME registriert, der die Funktion fireMove mehrmals pro Sekunde aufruft (Zeile 12). Der Wert der Variablen gunPower wird um 0,2 reduziert (Zeile 13), und der MovieClip gunPower-Display.bar wird entsprechend skaliert (Zeile 14).
Die Zeilen 15 bis 17 führen dazu, dass der Sound myGunSound mit einer Lautstärke von 0,3 abgespielt wird. Die Funktion fireMove sorgt dafür, dass sich das jeweilige Projektil nach oben bewegt
MovieClip: Dynamische Klasse Die MovieClip-Klasse ist eine dynamische Klasse. Objekten der Klasse können zur Laufzeit Eigen-schaften zugewiesen werden. Von diesem Merkmal wird hier ge-braucht gemacht, indem der Klasse GunFire die dynamische Eigenschaft myIndex zur Laufzeit zugewiesen wird.
FE Abbildung 20.16Der MovieClip »bar«, der inner-halb des MovieClips »gunPower-Display« liegt.
810 | 20 Spieleprogrammierung
(Zeile 21). Sobald mehr als 20 Objekte der Klasse GunFire exis-tieren (Zeile 22), werden die ersten fünf aus dem Array fireAr-ray (Zeile 23) entfernt. Dadurch verhindern Sie, dass die Anzahl der Elemente des Arrays immer größer wird und der Speicher vollläuft.
Sobald ein Objekt der Klasse GunFire außerhalb der Bühne ist (Zeile 25), wird der Ereignis-Listener unregistriert (Zeile 26) und das Objekt wird aus der Anzeigeliste entfernt (Zeile 27). Anschlie-ßend wird die Referenz auf das Objekt aus dem Array fireArray entfernt (Zeile 28).
20.5.6 Asteroiden erzeugen In der Bibliothek fi nden Sie einen MovieClip »Asteroid«, der mit der Klasse Asteroid verknüpft wurde. Im ersten Bild des Movie-Clips befi ndet sich die ursprüngliche Form des Asteroiden. Kol-lidiert der Asteroid mit dem Raumschiff oder einem Schuss des Raumschiffs, explodiert er. Eine entsprechende Animationsse-quenz fi nden Sie ab Bild 2 innerhalb des MovieClips. Ergänzen Sie den Code im zehnten Schlüsselbild um folgende Zeilen:
1: // Asteroid
2: var asteroidTimer:Timer=new Timer(700,int.
MAX_VALUE);
3: asteroidTimer.addEventListener(TimerEvent.TIMER,
createAsteroid);
4: asteroidTimer.start();
5: var asteroidArray:Array = new Array();
6: function createAsteroid(e:TimerEvent):void {
7: var newAsteroid:Asteroid = new Asteroid();
8: newAsteroid.x=randomExt(0,stage.
stageWidth-newAsteroid.width);
9: newAsteroid.y=0-newAsteroid.height;
10: newAsteroid.name="nohit";
11: newAsteroid.speed=randomExt(5,10);
12: addChild(newAsteroid);
13: asteroidArray.push(newAsteroid);
14: newAsteroid.addEventListener(Event.ENTER_FRAME,
moveAsteroid);
15: // Remove Asteroids
16: if (asteroidArray.length>120) {
17: for (var i:uint = 0; i<10; i++) {
18: asteroidArray[i].removeEventListener
(Event.ENTER_FRAME,moveAsteroid);
19: removeChild(asteroidArray[i]);
Anzahl der Objekte überprüfenWenn Sie mehrere Instanzen einer Klasse z. B. über eine for-Schleife mehrmals initialisieren, sollten Sie grundsätzlich zur Laufzeit über-prüfen, ob der Speicherbedarf des Flash-Films endlos zunimmt.Denken Sie daran, Objekte, die nicht mehr benötigt werden, für das Löschen aus dem Speicher freizugeben, und prüfen Sie den Speicherverbrauch, bevor Sie ei-nen Flash-Film bereitstellen.
GE Abbildung 20.17Die Zeitleiste des MovieClips »Asteroid«
GE Abbildung 20.18Explosionssequenz des Asteroiden
20.5 Asteroids-Spiel | 811
20: }
21: asteroidArray.splice(0,10);
22: }
23: }
Zu Beginn wird die Funktion createAsteroid im Abstand von 0,7 Sekunden aufgerufen (Zeile 2 bis 4). Wie Sie später sehen, wird die Zeit nach und nach verringert. In Zeile 5 wird ein Array initialisiert, dem später Objekte der Klasse Asteroid zugewie-sen werden. Die Funktion createAsteroid erzeugt Objekte der Klasse Asteroid. Dazu wird in Zeile 7 ein Objekt der Klasse ini-tialisiert. In Zeile 8 und 9 wird das jeweilige Objekt platziert. Auf der x-Achse wird es zufällig, auf der y-Achse wird es oben außer-halb der Bühne positioniert. In Zeile 10 wird dem Objekt der Ins-tanzname nohit zugewiesen. Der Instanzname wird später dazu verwendet, um festzustellen, ob der Asteroid bereits mit einem anderen Objekt kollidiert ist.
In Zeile 11 wird der dynamischen Eigenschaft speed ein zufäl-liger Wert zwischen 5 und 10 zugewiesen. Das Objekt wird zur Anzeigeliste hinzugefügt (Zeile 12), und eine Referenz auf das Objekt wird zum Array asteroidArray hinzugefügt (Zeile 13).
In Zeile 14 wird ein Ereignis-Listener an dem Objekt regist-riert, der dafür sorgt, dass die Funktion moveAsteroid mehrmals pro Sekunde aufgerufen wird.
20.5.7 Bewegung und Kollisionserkennung der AsteroidenDie Formen der Objekte, für die eine Kollisionserkennung durch-geführt wird, wurden so gewählt, dass die Kollisionserkennung über die Methode hitTestObject durchgeführt werden kann, und das obwohl es sich dabei nicht nur um rechteckige Formen handelt. Die Kollisionserkennung über die Methode hitTestOb-ject ist für dieses Beispiel jedoch ausreichend präzise. Ergänzen Sie den Code im zehnten Schlüsselbild um folgende Zeilen:
1: function moveAsteroid(e:Event):void {
2: e.currentTarget.y+=e.currentTarget.speed;
3: // Kollisionserkennung mit xFighter
4: if (e.currentTarget.hitTestObject(xFighter)&&
e.currentTarget.name=="nohit") {
5: setHealth(xFighterHealth-0.3);
6: if (xFighterHealth<=0) {
7: endGame();
8: }
9: e.currentTarget.gotoAndPlay(2);
Alternative: Levels
Es gibt in diesem Spiel keine Le-vels. Diese könnten jedoch ein-fach eingerichtet werden. Zum Beispiel könnte je Level die Zeit, nach der ein Asteroid erzeugt wird, reduziert werden.
Objekte entfernenSollte die Anzahl der Elemente des Arrays asteroidArray größer als 120 sein (Zeile 16), werden die ersten zehn Elemente (Zeile 18 und 19), d. h. die ersten zehn zuvor erzeugten Asteroiden, ent-fernt. Dadurch wird verhindert, dass der Speicher vollläuft. Beach-ten Sie, dass die Asteroiden sonst weiterhin existent wären, auch wenn Sie die Bühne bereits ver-lassen haben.
812 | 20 Spieleprogrammierung
10: e.currentTarget.name="hit";
11: myExplosion.play(0,1);
12: }
13: // Kollisionserkennung mit GunFire
14: for (var i:uint = 0; i<fireArray.length; i++) {
15: if (e.currentTarget.hitTestObject
(fireArray[i])&&e.currentTarget.
name=="nohit") {
16: e.currentTarget.gotoAndPlay(2);
17: e.currentTarget.name="hit";
18: fireArray[i].removeEventListener(Event.
ENTER_FRAME,fireMove);
19: try {
20: removeChild(fireArray[i]);
21: } catch (e:Error) {
22: // Display-Object existiert nicht
mehr.
23: }
24: fireArray.splice(i,1);
25: punkte+=40;
26: punkte_txt.text=String(punkte);
27: var mySoundChannel:SoundChannel=
myExplosion.play(0,1);
28: var mySoundTransform:SoundTransform=
new SoundTransform(0.3);
29: mySoundChannel.soundTransform=
mySoundTransform;
30: }
31: }
32: }
In Zeile 2 wird der jeweilige Asteroid um den Wert der Eigen-schaft speed nach unten verschoben. Ab Zeile 3 folgt die Kolli-sionserkennung zwischen dem jeweiligen Asteroiden und dem Raumschiff. In Zeile 4 wird über die Methode hitTestObject geprüft, ob das Raumschiff mit dem Asteroiden kollidiert. Zusätz-lich wird überprüft, ob der Instanzname des MovieClips gleich nohit ist. Dies ist notwendig, da die Kollisionserkennung auch kurz nach einer Kollision noch true ergeben würde.
Nur wenn beide Bedingungen erfüllt sind, wird der Code ab Zeile 5 ausgeführt. In Zeile 5 werden die Lebenspunkte des xFigh-ters um 0,3 reduziert. Dazu wird die Funktion setHealth aufge-rufen, die später noch definiert wird. Sollten die Lebenspunkte kleiner oder gleich 0 sein (Zeile 6), wird das Spiel durch den Auf-
Alternativer Schwierigkeitsgrad
Den Wert 0,3 können Sie na-türlich auch ändern, um die Schwierigkeit des Spiels zu be-einflussen.
20.5 Asteroids-Spiel | 813
ruf der Methode endGame beendet (Zeile 7). Auch diese Funktion wird später noch definiert. Um die Kollision zu visualisieren, springt der Lesekopf des Asteroiden-MovieClips auf Bild 2 (Zeile 9). Hier wird dann die Explosionsanimation des Asteroiden abgespielt. Der Instanzname des Asteroiden wird auf »hit« gesetzt (Zeile 10), um zu vermeiden, dass die vorausgehende Fallentscheidung beim nächsten Durchlauf erneut zum Erfolg führt. Anschließend wird der Sound myExplosion in Zeile 11 abgespielt.
Ab Zeile 13 wird eine Kollisionserkennung mit den jeweiligen Laserschüssen des Raumschiffs durchgeführt. Mithilfe einer for-Schleife (Zeile 14) werden die Elemente des Arrays fireArray durchlaufen. In Zeile 15 wird dann geprüft, ob ein Schuss mit einem Asteroiden kollidiert. In diesem Fall springt der Lesekopf des jeweiligen Asteroiden-MovieClips auf Bild 2 (Zeile 16), der Instanzname des MovieClips wird auf hit gesetzt, und der Schuss wird sowohl aus dem Array als auch von der Anzeigeliste entfernt (Zeile 18 bis 24).
Die Punktzahl wird um 40 erhöht (Zeile 25), und die neue Punktzahl wird im Textfeld »punkte_txt« ausgegeben. In Zeile 27 bis 29 wird der Sound myExplosionFire mit einer Lautstärke von 0,3 abgespielt.
Ergänzen Sie den Code nun um folgende Zeilen:
function setHealth(value:Number):void {
xFighterHealth=value;
healthBar.bar.scaleX=xFighterHealth;
}
Über die Methode setHealth werden die Lebenspunkte des Raumschiffs neu gesetzt. Dazu wird der Variablen xFighter-Health der Wert des Arguments value zugewiesen. Anschlie-ßend wird der MovieClip healthBar.bar entsprechend skaliert.
20.5.8 Schwierigkeitsgrad erhöhenDer Schwierigkeitsgrad soll mit zunehmender Spielzeit erhöht wer-den. Dafür wird die Zeit, nach der die Funktion createAsteroid aufgerufen wird, jeweils um 50 Millisekunden reduziert. Das führt dazu, dass mehr Asteroiden im gleichen Zeitraum erzeugt werden. Ergänzen Sie den Code im zehnten Schlüsselbild dazu wie folgt:
1: // Schwierigkeitsgrad
2: var levelTimer:Timer=new Timer(10000,7);
3: levelTimer.addEventListener(TimerEvent.TIMER,
setLevelUp);
try/catch-AnweisungEs kann vorkommen, dass das fire-Objekt zu diesem Zeitpunkt bereits von der Bühne entfernt wurde. Aus diesem Grund wird das Entfernen des Objekts in eine try/catch-Anweisung eingeschlos-sen. Das dient zur Verhinderung von Compiler-Laufzeitfehlern.
Alternative: Dynamische Punkt-zahl
Sie können das Spiel auch so än-dern, dass sich die Punktzahl mit zunehmender Spieldauer erhöht, und/oder Sie erstellen noch weitere Objekte (Alternativen zu Asteroiden), die eine höhere Punktzahl ergeben.
814 | 20 Spieleprogrammierung
4: levelTimer.start();
5: function setLevelUp(e:TimerEvent):void {
6: asteroidTimer.delay-=50;
7: }
Zunächst wird ein neues Timer-Objekt initialisiert (Zeile 2). Das Timer-Objekt sorgt dafür, dass siebenmal im Abstand von zehn Sekunden (10.000 Millisekunden) die Funktion setLevelUp auf-gerufen wird. Die Funktion setLevelUp reduziert den Wert der Eigenschaft delay des asteroidTimer-Objekts um 50.
20.5.9 Schussenergie aufladenImmer dann, wenn der Spieler die Maustaste drückt, wird ein Laserschuss abgegeben, soweit das Raumschiff über ausreichend Energie verfügt. Nach jedem abgegebenen Schuss soll die Energie reduziert werden, sodass der Spieler nicht permanent Schüsse abgeben kann. Diese Energie muss nach einiger Zeit wieder auf-geladen werden, damit das Raumschiff wieder schießen kann. Ergänzen Sie den Code dazu um folgende Zeilen:
1: // GunPower
2: var gunTimer:Timer=new Timer(500,int.MAX_VALUE);
3: gunTimer.addEventListener(TimerEvent.TIMER,
setPowerUp);
4: gunTimer.start();
5: function setPowerUp(e:TimerEvent):void {
6: if (gunPower+0.1<=1) {
7: gunPower+=0.1;
8: }
9: gunPowerDisplay.bar.scaleX=gunPower;
10: }
Die Energie soll alle 0,5 Sekunden automatisch aufgeladen wer-den. Dazu wird ein Timer-Objekt initialisiert (Zeile 2), das dafür sorgt, dass die Funktion setPowerUp aufgerufen wird. Die Funk-tion setPowerUp prüft zunächst, ob der Wert der Variablen plus 0,1 kleiner oder gleich 1 ist. In diesem Fall wird die Energie um 0,1 erhöht. Anderenfalls wäre die Energiekapazität des Raumschiffs bereits voll aufgeladen. Anschließend wird der MovieClip gunPow-erDisplay.bar dem neuen Wert entsprechend skaliert (Zeile 9).
20.5.10 Lebenspunkte erzeugenIn der Bibliothek finden Sie einen MovieClip »Energy«, der mit einer gleichnamigen Klasse verknüpft wurde.
Alternative: Schwierigkeitsgrad
Sie können sowohl die Zeitan-gaben als auch die Wiederho-lungen der Erhöhung des Levels anpassen, um die Schwierigkeit des Spiels zu erhöhen oder zu reduzieren. Beachten Sie dabei jedoch, dass der Wert der Eigen-schaft delay des asteroidTimer-Objekts nicht gleich oder kleiner als 0 werden darf.
20.5 Asteroids-Spiel | 815
Alle zehn Sekunden soll ein Spielelement (Energiepunkt) erschei-nen, über das der Spieler sowohl die Lebenspunkte des Raum-schiffs als auch die Schussenergie aufl aden kann, wenn er das Spielelement mit dem Raumschiff aufnimmt. Ergänzen Sie den Code dazu um folgende Zeilen:
1: // Energy
2: var energyTimer:Timer=new Timer(10000,int.
MAX_VALUE);
3: energyTimer.addEventListener(TimerEvent.TIMER,
createEnergy);
4: energyTimer.start();
5: function createEnergy(e:TimerEvent):void {
6: var myEnergy:Energy = new Energy();
7: myEnergy.x=randomExt(0+myEnergy.width,stage.
stageWidth-myEnergy.width);
8: myEnergy.y=0-myEnergy.height;
9: addChild(myEnergy);
10: myEnergy.addEventListener(Event.ENTER_FRAME,
moveEnergy);
11: }
12: function moveEnergy(e:Event):void {
13: if (e.currentTarget.y<stage.stageHeight) {
14: e.currentTarget.y+=10;
15: } else {
16: e.currentTarget.removeEventListener(Event.
ENTER_FRAME,moveEnergy);
17: removeChild(DisplayObject(e.currentTarget));
18: }
19: // Kollisionserkennung mit xFighter
20: try {
21: if (e.currentTarget.hitTestObject
(xFighter)) {
22: e.currentTarget.
removeEventListener(Event.ENTER_FRAME,
moveEnergy);
23: removeChild(DisplayObject
(e.currentTarget));
24: myEnergySound.play(0,1);
25: if (xFighterHealth+0.3<=1) {
26: setHealth(xFighterHealth+0.3);
27: }
28: gunPower=1;
29: }
Alternative: Schwierigkeitsgrad
Sie können den Schwierigkeits-grad beeinfl ussen, indem Sie die Stärke der Aufl adung ändern. Sie können auch festlegen, dass nur die Lebenspunkte wiederherge-stellt werden und nicht zusätz-lich die Energie des Raumschiffs.
GE Abbildung 20.19Der MovieClip »Energy«, der mit der Klasse Energy verknüpft wurde.
816 | 20 Spieleprogrammierung
30: } catch (e:Error) {
31: // Energy existiert nicht mehr.
32: }
33: }
In Zeile 2 bis 4 wird zunächst ein Timer-Objekt initialisiert und gestartet, das dafür sorgt, dass die Funktion createEnergy jeweils nach zehn Sekunden aufgerufen wird. Analog zur Erstel-lung eines Asteroiden wird ein Objekt der Klasse Energy erzeugt, positioniert und zur Anzeigeliste hinzugefügt (Zeile 6 bis 9). An dem Objekt wird ein Ereignis-Listener registriert (Zeile 10), der über das Ereignis Event.ENTER_FRAME mehrmals pro Sekunde die Funktion moveEnergy aufruft.
Innerhalb der Funktion moveEnergy wird zunächst geprüft, ob die Position auf der y-Achse des Energiepunkts kleiner als die Höhe der Bühne ist (Zeile 13). Ist das der Fall, wird der Ener-giepunkt um 10 Pixel nach unten verschoben (Zeile 14). Ande-renfalls befindet er sich unterhalb der Bühne und kann entfernt werden (Zeile 16 und 17).
Ab Zeile 19 wird geprüft, ob der Energiepunkt mit dem Raum-schiff kollidiert. Findet eine Kollision statt, wird der Energiepunkt entfernt (Zeile 22 und 23), und der Sound myEnergySound wird abgespielt (Zeile 24).
Sollen die aktuellen Lebenspunkte des Raumschiffs plus 0,3 kleiner oder gleich 1 sein (Zeile 25), wird der entsprechende Wert um 0,3 erhöht (Zeile 26). Der Wert für die Schussenergie wird in Zeile 28 zurück auf 1 gesetzt. Um den Schwierigkeitsgrad zu erhöhen, können Sie den Wert z. B. auch nur um 0,1 oder 0,2 erhöhen.
20.5.11 SlowMotion-Punkte erzeugenNeben den Lebenspunkten gibt es in der Bibliothek einen Movie-Clip »SlowMotion«, der mit der Klasse SlowMotion verknüpft ist. Alle zwölf Sekunden wird ein solcher Punkt erzeugt. Nimmt der Spieler den Punkt auf, wird die Bewegung von Asteroiden, die sich zu diesem Zeitpunkt auf der Bühne befinden, verlangsamt. Für die Logik des SlowMotion-Punkts ergänzen Sie den Code um folgende Zeilen:
1: // Slow Motion
2: var slowTimer:Timer=new Timer(12000,int.MAX_VALUE);
3: slowTimer.addEventListener(TimerEvent.TIMER,
createSlowMotion);
4: slowTimer.start();
Vermeidung von Compiler- Fehlern zur LaufzeitEs kann vorkommen, dass der Energiepunkt zu diesem Zeitpunkt nicht mehr existiert. Um Compi-ler-Fehler zur Laufzeit zu vermei-den, wurde der Teil in einen try/catch-Block eingebunden.
20.5 Asteroids-Spiel | 817
5: function createSlowMotion(e:TimerEvent):void {
6: var myMotion:SlowMotion = new SlowMotion();
7: myMotion.x=randomExt(0+myMotion.width,stage.
stageWidth-myMotion.width);
8: myMotion.y=0-myMotion.height;
9: addChild(myMotion);
10: myMotion.addEventListener(Event.ENTER_FRAME,
moveMotion);
11: }
12: function moveMotion(e:Event):void {
13: if (e.currentTarget.y<stage.stageHeight) {
14: e.currentTarget.y+=10;
15: } else {
16: e.currentTarget.removeEventListener(Event.
ENTER_FRAME,moveMotion);
17: removeChild(DisplayObject(e.currentTarget));
18: }
19: // Kollisionserkennung mit xFighter
20: try {
21: if (e.currentTarget.hitTestObject
(xFighter)) {
22: e.currentTarget.removeEventListener
(Event.ENTER_FRAME,moveMotion);
23: removeChild(DisplayObject
(e.currentTarget));
24: myEnergySound.play(0,1);
25: for (var i:uint = 0; i<asteroidArray.
length; i++) {
26: asteroidArray[i].speed=2;
27: }
28: }
29: } catch (e:Error) {
30: // Energy existiert nicht mehr.
31: }
32: }
Der Code ist nahezu identisch mit dem Code, der dafür sorgt, Lebenspunkte zu erzeugen.
20.5.12 Spiel beendenWenn die Lebenspunktzahl des Raumschiffs den Wert 0 unter-schreitet, soll das Spiel beendet werden. In diesem Fall wird die Funktion endGame aufgerufen. Ergänzen Sie den Code im zehnten Schlüsselbild abschließend um folgende Zeilen:
Alternative: Weitere Bonus-punkte einfügen
Auf dieselbe Art und Weise kön-nen Sie weitere Bonuspunkte einfügen, die verschiedene Ak-tionen ausführen. Zum Beispiel können Sie einen Punkt Blast erzeugen, der alle Asteroiden, die sich auf der Bühne befinden, zerstört. Oder Sie erzeugen Mi-nen, die über einen gewissen Zeitraum in einem bestimmten Bereich alle Asteroiden zerstö-ren. Weitere Bonuspunkte über-lassen wir Ihrer Fantasie.
818 | 20 Spieleprogrammierung
1: function randomExt(minVal:Number,maxVal:Number):
Number {
2: return Math.floor(Math.random() *
(1+maxVal-minVal)) + minVal;
3: }
4: function endGame():void {
5: xFighter.removeEventListener(Event.
ENTER_FRAME,posFighter);
6: stage.removeEventListener(MouseEvent.MOUSE_
DOWN,fireGun);
7: energyTimer.stop();
8: slowTimer.stop();
9: asteroidTimer.stop();
10: levelTimer.stop();
11: gunTimer.stop();
12: for (var i:uint = 0; i<asteroidArray.length;
i++) {
13: asteroidArray[i].removeEventListener(Event.
ENTER_FRAME,moveAsteroid);
14: removeChild(asteroidArray[i]);
15: }
16: gotoAndStop("Highscore");
17: }
18: stop();
In Zeile 1 bis 3 wird zunächst eine Hilfsfunktion randomExt definiert, die einen Zufallswert eines bestimmten Wertebe-reichs zurückgibt. Der Wertebereich wird durch die Argumente bestimmt. Die Funktion wurde bereits vorher mehrmals benutzt, um Objekte zufällig zu positionieren und eine zufällige Geschwin-digkeit zu definieren.
Die Funktion endGame sorgt dafür, dass alle Ereignis-Listener, die registriert wurden, entfernt (unregistriert) werden (Zeile 5 und 6). Die Timer-Objekte werden gestoppt (Zeile 7 bis 11).
Mithilfe einer for-Schleife werden die Elemente des Arrays asteroidArray durchlaufen und von der Anzeigeliste entfernt (Zeile 12 bis 15). Zum Schluss springt der Lesekopf der Haupt-zeitleiste auf das Bild mit dem Bildbezeichner Highscore (Zeile 16). Damit ist die Programmierung der Logik des Spiels abge-schlossen.
Hinweis: myEnergy- und myMotion-ObjekteDie Objekte myEnergy und myMotion müssen nicht unbedingt entfernt werden. Sie bewegen sich autonom nach unten bis au-ßerhalb der Bühne und werden dann entfernt.
Alternative: Mauszeiger einblenden
Wenn Sie den Mauszeiger zu Be-ginn ausgeblendet haben, sollten Sie ihn jetzt wieder einblenden. Ergänzen Sie den Code innerhalb der Funktion endGame dazu um folgende Zeile:
Mouse.show();
20.7 Highscore | 819
20.6 Verbesserungen
Das Spiel ist so, wie es ist, noch ziemlich simpel und bietet auf Dauer keine tatsächliche Herausforderung. Es lässt sich jedoch relativ einfach erweitern und dadurch deutlich interessanter gestalten. Einige Möglichkeiten dafür haben wir in der Margina-lie bereits genannt.
Professionelle Entwicklungsteams von Browserspielen besitzen meist jahrelange Erfahrung und arbeiten in Teams an einem Spiel mehrere Wochen, Monate oder sogar Jahre. Natürlich hatten wir einen solchen Zeitraum nicht zur Verfügung, deshalb sollten Sie das Spiel nicht mit einem professionellen Spiel vergleichen.
Wenn Sie sich weiter mit diesem interessanten Themenbereich beschäftigten möchten, empfehlen wir Ihnen zur Inspiration die Webseite http://www.flashgames.de, auf der Sie sehr viele Browserspiele auf Flash-Basis von professionellen Spieleentwick-lungsteams fi nden.
20.7 Highscore
Sie haben jetzt gelernt, wie Sie ein Spiel mit Flash strukturieren und entwickeln können. Ein besonderer Anreiz für viele Spieler ist es, sich mit anderen zu messen.
FE Abbildung 20.20Das fertiggestellte Spiel im Flash Player
Vielfältige AufgabenSpieleentwicklung ist grundsätz-lich eine herausfordernde Auf-gabe, da man sich sowohl mit Grafi k, Sound als auch mit der technischen Umsetzung bzw. Pro-grammierung beschäftigen muss.
Index | 877
IND
EX
Index
^ 354- 348-- 349! 353!= 350!== 350.. 729@ 728* 348, 645*= 349/ 348, 661/= 349& 353, 634, 869&& 353% 348+ 348++ 349< 350<< 354<= 350== 350=== 350> 350>= 350>> 354| 354|| 353~ 354$_FILES 767$_POST 8303D-Animationen 8493D-Bewegung 4183D-Drehungswerkzeug 109
Fluchtpunkt und Perspektive 111, 112
3D-Engines 8493D-Flip 4353D-Pinsel 83, 873DS Max 8503D-Versetzungswerkzeug 1109-teiliges Segmentraster 118, 513,
514.asf 583.avc 583.avi 583.dv 583.dvi 583.flv 583
.m1v 583
.m2p 583
.m2t 583
.m2ts 583
.m4v 583
.mov 583
.mp4 583
.mpg 583\n 625.php 668.php4 668.qt 583.savers 847.scr 847.sol 802.wmv 583
Aa 624, 651Abbremseffekt 239Abdunkeln 530Abmessung des Weichzeichners
590Abprallen 798abs 427Abschluss 77Abschrägen 531Abspielgeschwindigkeit 161Abspielrichtung 150Abspielzeit 604Abstandsberechnung 414Abwärtskompatibilität 286acos 427ActionScript
Datentypen 338Editoren 448Ereignis-Listener 376Ereignisprozeduren 376Ereignisse 376Format 333, 334Funktionen 360Loader 382Modulo 348Operatoren 348Schleifen 356Typisierung 339Variablen 336Zeitleistensteuerung 364
ActionScript 1 328ActionScript 2 328ActionScript 3 329, 837ActionScript 3.0-Klasse 447ActionScript-Editor 329ActionScript-Entwicklungsum-
gebungen 842ActionScript Viewer 855Activeden 498addChild 371addChildAt 371addController 657ADDED_TO_STAGE 381addEventListener 365, 376, 399,
501Addieren 531Addition 348Admin 671Adobe AIR 833Adobe Audition 550Adobe Device Central CS5 841Adobe Exchange 50Adobe Flash Catalyst 837Adobe Flash Lite 840Adobe Flex 835Adobe LiveCycle Data Services
836Adobe Media Encoder 583Adobe Media Player 585Adobe Soundbooth 550Adobe Sound Document 547ADPCM 548Aktualisieren 549Aktualisierungen 51album 560align 642Alle einblenden 333allowFullScreen 601alpha 367, 397Alpha 71, 531Als Video für Mobilgeräte in SWF
zusammengefasst importieren 593
Amayeta SWF Encrypt 5.0 856Amplitude 546Analoge Uhr 468anchorX 486anchorY 486
878 | Index
Ändern der Videogröße 586Android 840An Hilfslinie ausrichten 124Animation 149
3D-Bewegung 209Abspielrichtung 150Animation anlegen 162beenden 409Beschleunigung 239Bildbezeichner 159Bild-für-Bild 160Geschwindigkeit ändern 168Inverse Kinematik 230Klassische Tweens 197kopieren 196loopen 409Posenanimation 240Sequenzen 432Skalierung 209Steuerungspunkt 240Szenen 158Timing 202umkehren 432Zeitleiste 149Zwiebelschaleneffekt 170
Ankathete 415Ankerpunkt
entfernen 104umwandeln 101
AnsichtAn Fenster anpassen 56Vergrößerung 56zentrieren 56
Anti-Aliasing 257antiAliasType 638AntiAliasType.ADVANCED 638AntiAliasType.NORMAL 638Anwendungsbereiche 32
aktuelle Meldungen 33Animationen 33Benutzeroberflächen 33E-Learning 36Flash gegen HTML 5 35Präsentationen 34Spiele 34, 35Video-Anwendungen 35
Anzeigeklassen 366Anzeigeliste 365
Reihenfolge 371Reihenfolge ändern 373
Anzeigeobjektcontainer 365Anzeigeobjekte 365, 479
aus Speicher entfernen 372Eigenschaften 367, 368entfernen 370Ereignisse 380graphics 479hinzufügen 370Sichtbarkeit 373
Apache 668API 328appendChild 741appendText 645Apple iOS 840Arbeitsbereiche
auf einen anderen Computer übertragen 62
auswählen 62löschen 62
Arbeitsfläche 55Arbeitsumgebung 45
laden 62speichern 62
ARGB 537Argumente 361Arkuskosinus 427Arkussinus 427Arkustangens 427Array 338, 343
assoziativ 344Feldwerte 343indiziert 343Länge 345mehrdimensional 345Methoden 343, 344sortieren 345sortieren (mehrdimensional,
assoziativ) 346typisiert 347Verkettung 343
Array.CASEINSENSITIVE 346Array.DESCENDING 345, 346Array.DESCENDING. 746Array.NUMERIC 345, 346, 746Array.RETURNINDEXEDARRAY
346artist 560AS3CoreLib 827ASC 712asin 427ASP 667Assets 513Assoziative Arrays 344Asteroids 804
atan 427atan2 424, 427ATOM 733Attribute 705AU 547Audacity 550Audio-CD 545Audio-Editor 550Audio einschließen 595Audio-Ereignis 547Audio-Player 573Audio-Spur 592, 602Audio-Stream 547Audio Video Interleaved 583Auf (Zustand) 552Auf Ebenen verteilen 264Aufhellen 530Aufzählungszeichen 624Ausblenden 554Ausdrücke (regulär) 661Ausführungszeit 778Ausgabe-Fenster 335Ausgabeformat 585Ausgabegröße ändern 588Ausrichten
an Pixeln 78TLF-Text 279von Text 251
Auswahlbereich ausblenden 333Auswahl-Werkzeug 102Auswählbar 617Auswählen, ähnliche Farben 105Auszeichnungen 249
Fettdruck 250Kapitälchen 250Kursiv 250
autoAlpha 438, 439Auto-Format 333, 334AUTO_INCREMENT 705Automatischer Import 455Automatischer Klassen-Import
844Automatischer Paket-Import 844Automatisch unterschneiden 253autoSize 638AVE Imperator 855AVM 329AVM1Movie 369Away 3D 849Axialis Professional Screensaver
Producer 847
Index | 879
Bb 624Back 434background 638backgroundAlpha 652backgroundColor 638, 652Backslashes 723
entfernen 723Bandbreiten-Profiler 314
Bild-für-Bild 315Download-Einstellungen 315Optimierung des Ladeverhaltens
315Streaming-Grafik 314
Barrierefreiheit 321, 835Base64Encoder 827Basisklasse 369, 375, 467, 475Batch-Verfahren 585Baumpinsel 84, 93BCC 698Bearbeitbar 617Bearbeitbarer Text 524beginFill 487beginGradientFill 495Begrenzungsrahmen 134, 790Begrüßungsbildschirm 45Benutzerdefiniert 521, 554Benutzerdefinierte Preloader-
Schleife 616Benutzerdefiniertes Anti-Aliasing
264Beschleunigung 178, 204, 239, 404
Abbremseffekt 239abbremsen 204Beispiel 206Beschleunigungstypen 239Bewegungs-Editor 191Stärke 239verwenden 192
BEVEL 482bevelFilter 439BevelFilter 534Bewegung 209, 406
in Raum 209linear 406nicht linear 406
Bewegungs-Editor 184Anzeige steuern 184Beispiel 188Beispiel Beschleunigung 192Beschleunigung 191, 192Beschleunigungstypen 191
Eckpunkt 187Glättungspunkt 187Graphen 186Schlüsselbild hinzufügen 186verwenden 188Zeitleiste Umgang 186
Bewegungspfad 180, 201Beispiel 180drehen 180eigenen Pfad erstellen 183erstellen 180Umformen 179
Bewegungsrichtungen 405Bewegungs-Tween 172, 175
Animation an Pfad erstellen 180
Beispiel 175Beschleunigung 178Drehung 178Eigenschaften 177Eigenschaften animieren 173erstellen 172, 175Geschwindigkeit 180Instanzname 177Optionen 177, 178Pfad 178Pfad drehen 180Pfadumformung 179Tweenlänge ändern 181verlängern 176
Bewegungsvoreinstellungen 195bezier 439Bézierkurven 485bezierThrough 439Bühne 55, 365
Größe einstellen 57Bibliothek 141
bereinigen 144Elemente löschen 142externe 146gemeinsam genutzt 144Klassen-Instanzen erzeugen 374Ordner 143Ordnung und Struktur 142
BIGINT 706Bildbezeichner 158, 159
ansteuern 160Typen 159zuweisen 160
Bildebene 210, 523, 527Rotation 210
Bildebene Drehung 210
BilderAnsteuerung 160gleichzeitig bearbeiten 171kopieren 164mehrere gleichzeitig bearbeiten
171Schlüsselbilder 155
Bild-für-Bild-Animation 160Anwendungsbereiche 161Beispiel 161Bildrate 161Bildrate festlegen 161in MovieClip verschachteln 166
Bildlauf 647Bildrate 161
richtige Bildrate 161Timing 202
Bildschirmleseprogramme 321Bildschirmschoner 847BINARY 678Bindungswerkzeug 240Binär 353Binärsystem 353Bitmap 369
Dateigröße 213Eigenschaften 266in Vektor umwandeln 212Komprimierung 520mit ActionScript 536nachzeichnen 213
bitmapData 536BitmapData-Klasse 537Bitmap-Eigenschaften 520Bitmap-Filter 531, 533
animieren 532Bitmap-Füllung 116Bitmapgröße berechnen 524Bitmap in Vektoren umwandeln
105Bitmap-Klasse 536Bitmap-Linien 485Bitmap-Text 264Bitrate 549Bitshifting 354Bitverschiebung 354Bitweise 353Blaze 3D 850Bleistift 78Blender 850blendMode 533BlendMode.ADD 533BlendMode.ALPHA 533
880 | Index
BlendMode.DARKEN 533BlendMode.DIFFERENCE 533BlendMode.ERASE 533BlendMode.HARDLIGHT 533BlendMode.INVERT 533BlendMode.LAYER 533BlendMode.LIGHTEN 533BlendMode.MULTIPLY 533BlendMode.NORMAL 533BlendMode.OVERLAY 533BlendMode.SCREEN 533BlendMode.SHADER 533BlendMode.SUBTRACT 533Blitzpinsel 84, 90blockindent 625blockIndent 642Blocksatz 252
TLF-Text 279Blumenpinsel 84, 90blurFilter 439BlurFilter 534BMP 519Bogenmaß 413bold 512, 642Bones
Darstellung 233Eigenschaften 232Gelenk 233Hierarchie 232Position 233Steuerungspunkt 240Verbindung entfernen 241Verbindung hinzufügen 242
Bone-Werkzeug 231Boolean 338border 638borderColor 638Bounce 434Bouncing 798, 799BoundingBox 134br 624, 651Breakpoints 390browse 757, 765, 767Browser-Caching 681
verhindern 681Browser-Cookie 801bufferLength 605bufferTime 605Button 501buttonMode 825Button-Sound 552byteArray 576
ByteArray 575, 576bytesLoaded 573, 604, 605, 764bytesTotal 573, 604, 605, 764
CCache 681Caching verhindern 729call 856Call-Stack 390cancel 762, 767CANCEL 769caps 482CapsStyle.NONE 482CapsStyle.ROUND 482CapsStyle.SQUARE 482CASEINSENSITIVE 346catch 813CC 698CDATA 739CHANGE 503CHAR 706Charakteranimation 235Checkbox 500chmod 686Cinema 4D 850Circ 434clear 481, 802CLICK 380, 788Click to Flash 328client 599, 605, 606, 610close 561, 573, 603CMS 765Code Completion 843, 846Codefragmente 331, 333Codehinweis zeigen 333Coderedundanz 475Collision Detection 789color 512, 642, 652colorMatrixFilter 439ColorMatrixFilter 534colorTransform 439columnCount 652columnGap 653columnWidth 653comment 560comments 731Compiler-Fehler 362, 389COMPLETE 383, 574, 758, 762, 769Component Assets 514computeSpectrum 575, 576concat 343connect 598, 857
ContainerController 657Container und Fluss 280, 619contains 744contentLoaderInfo 382controlX 486controlY 486ConvolutionFilter 534Cookie 801cos 427createGradientBox 495creationDate 770Cross-Domain-Policy 563, 730,
858CSS 315, 640, 652
Flash-Film mittig im Browser zentrieren 316
Positionierung 315Cubic 434Cue-Point-Name 606Cue-Points 605
Ereignis 607Navigation 610, 611
currentFPS 605currentTarget 377, 633curveTo 485CustomEase 434Custom Ease Builder 434
DDarüber (Zustand) 552data 508, 633, 677, 695, 802DataEvent.UPLOAD_COMPLETE_
DATA 770dataFormat 633, 678Data Modelling 702date 675Date 681DATE 706Dateiendungen überprüfen 771Dateigröße
analysieren 291SWF-Datei 43
Dateirechte 686, 768Datenbank erstellen 703Datenbank-Login 710Daten lokal speichern 803Datensatz 708
aktualisieren 726einfügen 707
Datentyp 336, 338, 673, 705, 741ermitteln 340Überprüfung 370, 723
Index | 881
Datentypkonflikt 340Datentypumwandlung 341DATETIME 706Datum 665, 675Debuggen 389Debug-Konsole 389Debug-Optionen 333DECIMAL 706Decompiler 291default 351defaultTextFormat 639, 640Dekompilieren 855Dekorpinsel 84, 88Deko-Werkzeug 83
3D-Pinsel 87Baumpinsel 93Blitzpinsel 90Blumenpinsel 90Dekorpinsel 88Feuerpinsel 89Flammenpinsel 89Gebäudepinsel 88Partikelsystem 91Rankenfüllung 84Rasterfüllung 85Rauchanimation 92Symmetriepinsel 86
delay 814delayedCall 431delete 743De MonsterDebugger 392DESC 712DESCENDING 345, 346Desktop-Anwendungen 848DF3 644DF4 644Diagramme 836die 712, 830Differenz 531Digital Video 583direction 653DisplacementMapFilter 534DisplayList 365DisplayObject 366, 369DisplayObjectContainer 366, 369dispose 541, 795DISTINCT 713div 650Division 348Dokumenteigenschaften 56Dokumentfenster
Ansicht vergrößern/verkleinern 56
Ansicht verschieben 56Dokumentklasse 464Doppelklick 380Doppelte Variablendefinition 395DOUBLE 706DOUBLE_CLICK 380, 788do-while 357download 762, 767Download 761
Einstellungen 315simulieren 315
Drag & Drop 332, 787draw 795drawCircle 494drawEllipse 494Drawing-API 479drawRect 488drawRoundRect 493drawSpectrum 579Dreamweaver 632Drehung 178Dreieck 414DRM 863dropShadowFilter 440DropShadowFilter 534Durchschussmodell 617dynamic 452Dynamische Klasse 452Dynamische Textfelder 247, 617Dynamische Variablen 339
EE 428E4X 727easeIn 434easeInOut 434easeOut 434Easing 406, 407, 433Easing Equations 433Ebene 530
Arbeiten 150bei Veröffentlichung ignorieren
154Bewegungs-Tween 173Darstellungsoptionen 157Ebenenmodell 150Ebenenordner erstellen 152in Führungsebene umwandeln
200löschen 151Maske zuweisen 220mit Ebenen arbeiten 150
Name ändern 151Negativbeispiel 151Ordner 152Ordner steuern 152Posenebene 235Reihenfolge 151Rotation 210sperren 154steuern 153Tween 173
echo 674, 714Echte Kursive 250Eckpunkt 187Eckrundungen 96, 493Eclipse 836ECMA 327ECMAScript 727Effekt 554Eigene Klassenpfade 454Eigene Pakete 456Eigenschaften 451
Bewegungs-Tween 177Einbettung 620
in HTML 293mit dem SWFObject 301mittig positionieren 316
Einblenden 554Eingabefokus 628Eingabehilfen 321
Symbole 322Eingabetextfelder 617Eingebettete Schriften 263Eingebettete Videos 595Einstellungsmanager 863Einzeilig 619Elastic 434Elemente
gemeinsam nutzen 146in anderen Flash-Filmen nutzen
146Ellipse 271Ellipsenförmige Bewegung 422Ellipsengrundform 98Ellipsenwerkzeug 97Ellipse zeichnen 494E-Mail 697E-Mail-Adresse 665E-Mail-Header-Injection 698E-Mail-Link 255E-Mail-Verknüpfung 255embedFonts 639, 645EMBED-Tag 301
882 | Index
Emulieren 841endFill 488Endlose Ausführungen 364Endlosschleifen 357, 675Endloswiederholungen 561ENTER_FRAME 381, 398Entwicklungsumgebung 46
anpassen 57Eolas-Patentverletzung 301Equalizer 576Ereignis-Listener 376, 398, 768
entfernen 378Ereignisprozeduren 376, 398Ereignisse 376, 398, 551Error 389Error Highlighting 843Ersetzung (Text) 662Escape-Sequenzen 634event 606Event.ADDED_TO_STAGE 381Event.CANCEL 769Event.CHANGE 503Event.COMPLETE 382, 383, 574,
758, 762, 769Event.ENTER_FRAME 381, 398Event.EXITING 835Event.ID3 560, 574Event.INIT 382, 383Event.MOUSE_LEAVE 788Event.OPEN 384, 769Event.REMOVED_FROM_STAGE
381Event.SELECT 758, 765, 770Event.SOUND_COMPLETE 562,
575Event.UNLOAD 384exec 661EXITING 835exp 427Experten-Modus 330Expo 434Export 320
Bild 320Film 320für ActionScript 375, 558für gemeinsame Nutzung zur
Laufzeit 145, 644Exporteinstellungen 586, 589Exportformate 320extends 476ExternalInterface 856Externe Bibliothek 146
Externes Video mit Playback- Komponente laden 593
Externe Videos 597
FF4V 583FadeOut 408Fading-Animation 411Fallunterscheidung 349false 338FAQ 305, 777Farbe anpassen 531Farbeimer 113
Lückengröße 113Farbeimerwerkzeug
Füllung sperren 114Farbeinstellungen 212Farbharmonieregel 73Farbpalette bearbeiten 72Farbschema 73
bearbeiten 73erstellen 73
Farbton 211, 531Farbverlauf 115
über mehrere Formen 114Farbe einfügen 115Farbe entfernen 116linear 115, 221radial 116transparente Farbe 222
Farbverlauf – Geschliffen 531Farbverlauf – Glühen 531Farbverlaufsfüllungen 494Farbverlaufslinien 494Farbverlaufswerkzeug 117FDT 845Feder 38, 240
aktivieren 240Feed 733Fehlende Schriften ersetzen 269Fehlerbehebung 454Fehlermeldungen 394Fehlersuche 389Fehlerursachen 394Felder 338, 705Feldwerte 343Fenster
maximieren 57minimieren 57schließen 57verankern 58Werkzeuge 51
Fenstermodus Veröffentlichung 296
Feueranimation 84, 89FFTMode 576FileFilter 766fileList 781File Packager 581File Promises 835FileReference 757
Dateiendungen 771Download 761Eigenschaften 770Ereignisse 768Fehlerursachen 777Fortschrittsanzeige 763Methoden 767Upload 765, 777
FileReference.creationDate 770FileReferenceList 781FileReference.modificationDate
770FileReference.name 770FileReference.size 770FileReference.type 770FileZilla 755Film exportieren 853
Dateiformate 320, 321Film komprimieren 289Filter 529, 531filters 534final 475Fixierung anwenden/aufheben 457Flaches Bitmap 523, 528Flammenpinsel 84, 89Flash Builder 44, 836Flash Catalyst 837Flash Components 498Flash-Cookie 801Flash-Datei (ActionScript 3.0) 335Flash Debug Player 389Flash Decompiler Trillix 855FlashDevelop 842Flash Development Tools 845flash.display 366Flash-Ebenen 526Flash-Export 286
ausgeblendete Ebenen exportieren 289
Debugging erlauben 291Film komprimieren 289Gerätesound exportieren 289Größenbericht 290
Index | 883
Sicherheit bei lokaler Wiedergabe 292
Skript-Höchstzeit 292Soundeinstellungen übergehen
289SWC exportieren 290Trace-Aktionen übergehen 291Version 286vor Import schützen 291
Flash-FilmBildrate 57Größe 57Hintergrundfarbe 57mittig im Browser 316mittig im Browser am oberen und
unteren Rand 318testen 50transparent 313
Flash Games 819Flash gegen HTML 5 35Flash-Historie 29Flash-JavaScript 49Flash Lite 840Flashloaded 498Flash Media Server 582, 593Flash Player
Kontextmenü 311Version 286
Flash Player Trust 864Flash-Player-Verbreitung 328Flash-Player-Versionen testen 856Flash-Spiele 819FlashVars 305
einsetzen 307FlashVars Zugriff aus Flash 305Flash-Version
aktivieren 51deaktivieren 51feststellen 294registrieren 51
Flash Video 583Flash-Video-Formate 583FLA-Wiederherstellung 855fl.controls 500Flex 835Flex Builder 836Flex-Charting-Komponenten 836Flex SDK 842Fließkommazahl 706FLOAT 706floor 427, 800flowComposer 657
fl.transitions 429Fluchtpunkt 112flush 802FLV-Format 583FLV in SWF einbetten und in Zeit-
leiste abspielen 593FLV-Media Player 585FLV Player 585FocusEvent.FOCUS_IN 629FocusEvent.FOCUS_OUT 629FOCUS_IN 629FOCUS_OUT 629Fokus 629Folienpräsentationen 838Follow TCP Stream 689font 512, 642, 645Font 638, 645font color 624font face 624fontFamily 653fontName 645font size 624fontSize 653fontStyle 653fontWeight 653for 358, 375, 675foreach 675for-each-in 360for-in 359format 652Formatierungseinstellungen TLF-
Text 274FormatValue.AUTO 652FormatValue.INHERIT 652Formen 479
Arten 70Formmarken 216
einsetzen 216entfernen 217Reihenfolge 217
Form-Tween 212Formmarken einsetzen 216
Formularanwendungen 838Fortschrittsanzeige 862Foto (JPEG) 520Fourier-Transformation 576frame 440frameLabel 440Freihandwerkzeug
Begradigen 79Glätten 79
Frei-transformieren-Werkzeug 108
Modi 108Frequenz 546from 431From 698FROM 712FTP-Zugang 592Führungsebene 198Füllfarbe 70, 79Fülltyp 495Füllung 487
Strichlinie hinzufügen 113Funktionen 360, 675
endlose Ausführungen 364Geltungsbereich 361rekursive 363
Funktionsargumente 361Funktionsparameter 361FXG 528
GGallery 503Ganzzahl 338Gapless-Playback 563GarageBand 550Garbage Collector 372, 411Gaußscher Weichzeichner 590Gebäudepinsel 83, 88Gedankenstrich 271Gegenkathete 415Geltungsbereich 342
Dokumentklasse 465von Funktionen 361
Gemeinsame Nutzung 548, 644Gemeinsam genutzte Bibliothek
144genre 560Geometrie 412Geräteprofile 841Geräteschriftarten 258, 620, 643
Mac 258Maskierung 259Vorteil 259
Gerätesound 548Geschichte von Flash 29Geschwindigkeit 180, 404
ändern 168Gesten 834GESTURE_ZOOM 834GET 684getBounds 792getChildAt 369getChildByName 370
884 | Index
getChildIndex 371getLineText 646getLocal 802getPixel 538getPixel32 540getPixels 540Getter 472getTime 681getTimer 799getVector 540g-Flag 662GIF 382, 519GIF-Export 297Gleich 350Glühen 531Globales Error Handling 835Globale Sicherheitseinstellungen
863glowFilter 440GlowFilter 534Glättungspunkt 187Golem.de 734gotoAndPlay 365gotoAndStop 365GradientBevelFilter 534GradientGlowFilter 534GradientType.LINEAR 495GradientType.RADIAL 495Gradmaß 413Grafikaustausch-Format 528graphics 479Größe durch Skalieren anpassen
587Größer als 350Größer gleich 350Groß-/Kleinschreibung TLF-Text
275groupName 504Grundfarbe 530Grundlinienverschiebung TLF-Text
279Gruppierung aufheben 121Gästebuch 715GTween 429
HH.264 583Haarlinie 77Hacker 820Haltepunkte 390Handy 839Hardwarebeschleunigung 292
Hartes Licht 531Hashfunktion 827Hashwerte 828Header-Injection 698height 367, 397, 637Helligkeit 211, 531hexColors 440hide 806Hierarchie 365Highscore 819Highscore-Sicherheit 826Hilfe 333Hilfslinie 123
anzeigen 123ausrichten 124bearbeiten 123entfernen 123sperren 125
Hilfswerkzeuge 1189-teiliges Segmentraster 118Handwerkzeug 121Hilfslinien 123Raster 125Zoomwerkzeug 122
Hineinspringen 391Hintergrundfarbe 57hitTest 789, 792hitTestObject 789, 811, 812hitTestPoint 789, 790Hüllkurve bearbeiten 554HORIZONTAL 481hspace 624HTACCESS 859HTC 840HTML, Variablen übergeben 307HTML 5 35HTML 5 gegen Flash 35HTML-Absatz 624HTML-Export 293HTML-Formatierungen 622HTML-Ladeverhalten 313HTML-Tags 624htmlText 622, 639HTML-Textfelder 622HTTP 581, 667
GET 684POST 686POST-/GET-Überwachung 688
HTTP Dynamic Streaming 581HttpFox 688HTTP-Methode 684, 686HTTPS 698
HTTP_STATUS 768, 769HTTPStatusEvent.HTTP_STATUS
768, 769Hypertext Preprocessor 667Hypotenuse 415
Ii 624id3 573ID3 560, 574if 349, 673if-else 351if-else-if 351ignoreComments 731ignoreWhitespace 732Illustrator-Import 525Im Code zusammengeführt 616img 624, 651import 454Importieren 550Importierte JPEG-Daten
verwenden 520include 711indent 625, 642Index 705Index-Reihenfolge 371Indizierte Arrays 343Inheritance 474INIT 383Inkompatibilitätsbericht 526In-Punkt 589INSERT 720Instantiierung 446InstantStorm 848Instanz 130
auf Bühne platzieren 595Instanzeigenschaften 127, 130, 462Instanzmitglied 462Instanzname 177, 398, 499In Symbol konvertieren 129int 338INT 706Integer 338InteractiveObject 369, 637, 785Interaktion 785internal 460, 461, 466Internetadresse mit Text
verknüpfen 254Internet Explorer 7 301int.MAX_VALUE 562Inverse Kinematik 230
Beispiel 235
Index | 885
Beschleunigung 239Bindungswerkzeug 240Bones Eigenschaften 232Bone-Werkzeug 231mit ActionScript nutzen 234Pose einfügen 237Posenanimation 240Posenebene 231Skelett-Animation 234Skelett-Hierarchie 233Steuerungspunkte ausrichten 242Verbindung entfernen 241Verbindung hinzufügen 242
IO_ERROR 383, 560, 574, 600, 677, 768, 769
IOErrorEvent.IO_ERROR 383, 560, 574, 600, 768, 769
iOS 840iPad 840iPhone 42, 840IPhone-Packager 840is 370isset 697italic 512, 642item 732
JJapanisch 651JavaScript (Zugriff) 856join 343joints 482JointStyle.BEVEL 482JointStyle.MITER 482JointStyle.ROUND 482JPEG 382, 519JPEG-Deblocking 522JPEG-Export 299JSFL-Format 49JumpEye Components 498
KKanal 548Kantenglättung 257Kapitälchen 250Kaskade 652Kennwort 619kerning 642, 653Kerning 252Key 865KeyboardEvent 786KeyboardEvent.KEY_DOWN 381,
785, 865
KeyboardEvent.KEY_UP 381, 785, 865
keyCode 786Key-Codes 865KEY_DOWN 381, 785, 865KEY_UP 381, 785, 865kill 431killDelayedCallsTo 431killTweensOf 431Kilohertz 546Kinematik 230Kinsoku Shori Type 617Klasse 446
aus Bibliothek 374dynamische 452erstellen 450, 458mit Symbol verknüpfen 467
Klassenbezeichner 448Klassenmitglieder 462Klassenname 447Klassenpfad 453, 456Klassischer Text vs. TLF-Text 273Klassische Tweens 197
Abbremsung 203an Pfad ausrichten 198, 199Beispiel 199Beschleunigung 203, 206erstellen 197Führungsebene 198in Führungsebene umwandeln
200kein Bewegungspfad 197Pfad hinzufügen 198Schlüsselbilder einfügen 200Timing 202
Kleiner als 350Kleiner gleich 350Kodierung 585Kollation 704Kollisionserkennung 789
Begrenzungsrahmen 790pixelbasiert 792pixelbasiert (transformiert) 794positionsbasiert 796punktbasiert 790
Kommagetrennt 344Kommentarblock anwenden 333Kommentare 589, 673, 731
entfernen 333Kommentarfunktionen 335Kommunikation zwischen zwei
Flash-Filmen 857
KomponentenEigenschaften 501Ereignisse 502Methoden 501Typ anpassen 511UIScrollBar 648Video-Playback 593
Komponentenparameter 499Komprimierung 520, 548Konstruktor 449Kontaktformular 689Kontextmenü 51Kontrast 531Kontrolle des Ladevorgangs 382Konturansicht 154, 171Konturformat 643Koordinatensystem 412Kosinus 415Kreisbewegung 422Kreiszahl 413, 428Kreis zeichnen 97, 494Kryptografie 827Kuler-Bedienfeld 73Kurvensegment 100Kurven zeichnen 485Kurzschreibweise 349, 352
Llabel 504Label 504Ladefortschritt (Preloader) 860Ladeverhalten von Flash-Filmen
313Lame 563Lasso, Auswahl abschließen 105Lassowerkzeug 104Lateinisch einfach 622latin1_german1_ci 704Laufweite 655Laufzeitfehler 389Laufzeitumgebung 833Lautstärke 546, 568, 603Lautstärkeregler 603Layout
Spaltenbreite anpassen 61Zeilenhöhe anpassen 61
leading 625, 642Lebenspunkte 814leftMargin 642leftPeak 574leftToLeft 575leftToRight 575
886 | Index
Leistungsvergleich von Schleifen 358
length 345, 573, 639, 731Leserichtung 251letterSpacing 512, 642li 624Ligaturen 276Lightwave 3D 850Lineal 122
anzeigen 123Linear 434LINEAR 495Linearer Farbverlauf 115lineBitmapStyle 485lineBreak 653lineGradientStyle 494lineHeight 653LineScaleMode.HORIZONTAL 481LineScaleMode.NONE 481LineScaleMode.NORMAL 481LineScaleMode.VERTICAL 481lineStyle 480lineThrough 653lineTo 480Linien 479
gerade Linie erzeugen 100Kurve erzeugen 100verbinden 77
Linienenden 482Liniensegment 100Linienwerkzeug 74Linker Kanal 554List 502ListEvent 750Live Error Highlighting 846Live-Vorschau 498LN2 428LN10 428Länge/Set 705load 382, 558, 559, 573, 687, 730,
757, 767Loader 368, 382LocalConnection 857LOCAL_WITH_FILE 856log 427LOG2E 428LOG10E 428Login 710Lokaler Geltungsbereich 342Lokaler Speicher 801Lokaler Videoplayer 584Lokaler Webserver 669
Lokale Speicherung 760LONGTEXT 706Loopen 409loose typing 339Lose Typisierung 339Löschen 458, 531
MMacMouseWheelHandler 860mail 697MAMP 669Manueller Zeilenumbruch 625Masken 218Maskenebene 219, 220
Farbe 219Maskierung 723
von Geräteschriften 260Math.abs 427Math.acos 427Math.asin 427Math.atan 427Math.atan2 424, 427Math.ceil 427Math.cos 427Math.E 428Math.exp 427Math.floor 427Math.LN2 428Math.LN10 428Math.log 427Math.LOG2E 428Math.LOG10E 428Math.max 427Math.min 427Math.PI 413, 428Math.pow 427Math.random 427Math.round 428Math.sin 428Math.sqrt 415, 428Math.SQRT1_2 428Math.SQRT2 428Math.tan 428Matrix 495Matrix für Farbverläufe 495Maus 369, 381, 785
Ereignisse 788, 789Mausrad 787Mausrichtung 424Maussteuerung 787Mauszeiger
ausblenden 806
einblenden 818max 427maxChars 639max_execution_time 778Maximale Zeichenanzahl 619max_input_time 778MAX_VALUE 562Maya 850MD5 827MEDIUMINT 706MEDIUMTEXT 706Mediävalziffern 271Mehrdimensionale Arrays 345Mehrere Argumente 362Mehrspaltiger Text 657Mehrzeilig 619memory_limit 778Menü
Ansicht 48Bearbeiten 47Befehle 49Datei 47Debuggen 50Einfügen 49Fenster 51Hilfe 51Modifizieren 49Steuerung 50Text 49Zeitleiste 48
Menüleiste 47Metadaten 591method 687Methoden 452Microsoft SQL Server 701Mikrofon 835min 427MinimalComps 498Minuskelziffern 271Minute 468Mischfarbe 530Mischmodi 529, 533MITER 482Mitglieder 462mitterLimit 482Mobile Endgeräte 839modificationDate 770Modulo 348Mojikumi 617MonsterDebugger 392MorphShape 369MOUSE_DOWN 380, 787, 788
Index | 887
MouseEvent 376MouseEvent.CLICK 380, 788MouseEvent.DOUBLE_CLICK
380, 788MouseEvent.MOUSE_DOWN
380, 787, 788MouseEvent.MOUSE_MOVE 381,
401, 789MouseEvent.MOUSE_UP 380, 788MouseEvent.MOUSE_WHEEL
787, 789, 859MouseEvent.ROLL_OUT 380, 789MouseEvent.ROLL_OVER 380, 789MOUSE_LEAVE 788MOUSE_MOVE 381, 401, 789Mouse.show 818MOUSE_UP 380, 788MOUSE_WHEEL 787, 789, 859moveTo 486MovieClip 338, 368
Bild-für-Bild-Animation 166dynamische Klasse 809Registrierung ändern 136Tween erstellen 197verschachteln 224Vorteile 224
MP3 547, 548, 563MP3-Player 839MPEG 583MPEG 4 583multiline 639Multiplikation 348, 530Multi-Preloader 862Multi-Touch 834Muster 661MVC 649MXML 837MySQL 701
Daten an Flash übergeben 713Datenbank erstellen 703Datenbanksätze einfügen 720Datenbankverbindung herstellen
711Datentypen 705Felder bearbeiten 706Gästebuch 715phpMyAdmin 703Sicherheit 723Tabelle erstellen 704Tabellen exportieren 708Tabellen importieren 709
mysql_connect 711, 720
mysql_fetch_array 713mysql_num_rows 713mysql_query 712, 720mysql_real_escape_string 724mysql_select_db 712, 720MySQL Workbench 702
NNach links 554NACH LINKS 354Nach rechts 554NACH RECHTS 354Näherungswerte 409name 367, 370, 606, 639, 761, 770Namenskonflikte 453Namespace 395NaN 341Nativ 727Natürlicher Logarithmus 427navigateToURL 761navigation 606Navigation 384Negativ multiplizieren 530Netbook 839NetConnection 598NET_STATUS 600NetStatusEvent.NET_STATUS 600NetStream 598
Eigenschaften 603Ereignisse 600
Neue Datei 458Neuer Ordner 457Neues in Flash CS5 37
Benutzeroberfläche 37Codefragmente 43Codegenerierung 39CS Live 43Deko-Werkzeuge 40Feder 38Integration Flash Builder 44Inverse Kinematik 38iPhone 42Neue Template-Vorlagen 42SWF-Verlauf 43Text-Engine TLF 38Verbesserte Video-Funktionen 41XFL-Dateiformat 40
Neues Projekt 457new 450nextFrame 365NICHT 354NONE 481, 482
Normal 530NORMAL 481NOT 353Notepad 632Notepad++ 632, 709null 337, 372, 452, 534Null 705Number 338NUMERIC 345, 346Numerisch sortieren 345numLines 639Nur auf lokale Dateien zugreifen
864Nur auf Netzwerk zugreifen 864Nur Flash – Vollbild zulassen 601Nur zum Lesen 617
OObfuscator 832, 855Object 338OBJECT-Tag 301Objekte 445
anordnen 120erstellen 450gruppieren 120zählen 463
Objektzeichnung 70ODER 353, 354Ohne 554ol 624onCompleteParams 435onCuePoint 606, 607onMetaData 610onReverseComplete 435onReverseCompleteParams 435onUpdateParams 435OPEN 384, 769opendir 779openWithDefaultApplication 835Operatoren 348, 673
arithmetisch 348bitweise 353einfach 348is 370logisch 352Vergleich 349
OPML 733Optimal 556Oracle Database 701ORDER BY 712Ordner 152Out-Punkt 589
888 | Index
override 477overSkin 515Overwrite 433
Pp 624, 650package 449paddingBottom 654paddingLeft 654paddingRight 654paddingTop 654Paket-Pfad 449, 453pan 575Papervision 3D 849ParagraphElement 655paragraphEndIndent 654paragraphSpaceAfter 654paragraphSpaceBefore 654paragraphStartIndent 654parameter 607Parameter 361, 606
Standardwerte 363unbekannte Anzahl 363
parent 364, 367Partikelsystem 84, 91Passwort 619Passwortschutz 859pause 603PDA 839Perian 585Perl 667Pfad 178, 528
Ankerpunkte entfernen 101Ankerpunkte hinzufügen 101Bewegungs-Tween 178schließen 98, 101
Pfad Umformung 179Photoshop-Import 522PHP
Daten senden 677Daten senden und empfangen
684Datentypen 673Datums- und Zeitfunktion 675Fallentscheidung 673for 675foreach 675Funktionen 675Gästebuch 715if 673Kontakformular 689Operatoren 673
php.ini 778serverseitiges Datum und Zeit
682Sicherheit 697Sprachelemente und Syntax 672Stringverkettung 673switch 674Upload 767Variablen 672Verzeichnis auslesen 779Voraussetzungen 668while 674
phpinfo 668phpMyAdmin 703PHP und MySQL 710Pi 413, 428Pinselmodus 80Pinsel-Werkzeug 79
Füllfarbe 79Glätten 79
Pipette 114Pixel auslesen 538Pixelbasierte Kollisionserkennung
792Pixelfont 266
Positionierung 268Regeln 267Schriftgröße 267Textausrichtung 267Textauszeichnung 267Wann Sie verzichten sollten 268
Pixelgrafik 31pixelHinting 481Pixel setzen 540pixelSnapping 536PixelSnapping.ALWAYS 537PixelSnapping.AUTO 537PixelSnapping.NEVER 536Pixel und Vektoren 31play 559, 573, 603, 806Plugin Switcher 856PNG 382, 519PNG-Export 300Polygon 99Polysternwerkzeug 99pop 344Popup-Fenster 856Ports 672Pose einfügen 237Posenanimation 240Posenebene 231position 566, 574
Positionierung via CSS 315Positionsbasierte Kollisionser-
kennung 796POST 686, 778PostgreSQL 701Postleitzahl 665post_max_size 778pow 427preg_replace 698Preloader 313, 382, 383, 763, 774,
860Preloader-SWF 616prependChild 742prevFrame 365private 461Private Browsing 802Privater Modus 802PROGRESS 384, 561, 574, 762, 769ProgressEvent.PROGRESS 384,
561, 574, 762, 769Progressiver Download 562, 581Projekt-Fenster 457protected 461ProTools 550Proxy 737public 451, 460Punktsyntax 502push 344Pythagoras 414Python 667
QQuad 434Quadratwurzel 428Qualität 549Quart 434Quellpfad 459
Filmbasiert 459Global 459
Quickfixes 846QuickTime 583Quick-View-Outline 847Quint 434
RRADIAL 495Radialer Farbverlauf 116Radiant 413Radiergummi 94
Form 94Größe 94
RadioButton 504
Index | 889
random 427Rankenfüllung 83, 84Raster 125
bearbeiten 125einblenden 101
Rasterfüllung 83, 85Rastergrafik 32Rasterlinie verschieben 120Ratios 495Rauchanimation 84, 92RAW 548readdir 779readFloat 579REAL 706Rechteck
mit abgerundeten Ecken 493ohne Außenlinie 95zeichnen 488
Rechteckgrundform 96Rechteckwerkzeug 95Rechter Kanal 554Rechtschreibprüfung 272Rechtwinkliges Dreieck 414Red5 582Refactoring 844, 847RegEx 661RegexBuddy 664register_globals 685Registrierung eines MovieClips
ändern 136Registrierungspunkt 135Reguläre Ausdrücke 661
Beispiele 663Methoden 661Text ersetzen 662
Reihenfolge Ebene 151Rekursive Funktionen 363Remote-Debug 391Remote-Debugging 292removeAll 755removeChild 372removeChildAt 372REMOVED_FROM_STAGE 381removeEventListener 378, 501,
786removeTint 441Rename 844repeat 485replace 662replaceText 646restrict 640Restwert 348
resume 603RETURNINDEXEDARRAY 346reverse 344, 435Rhino 3D 850RIA 833rightmargin 625rightMargin 642rightPeak 574rightToLeft 575rightToRight 575ROLL_OUT 380, 789ROLL_OVER 380, 789root 364rotation 367, 397Rotation 210, 413
Bildebene 210im Raum 210
rotationX 367, 398rotationY 367, 398rotationZ 367, 398round 428ROUND 482RSS 733RSS-Feed lesen 734RTMP 582Ruby 667Rückgabewert 361, 362, 449, 453Runtime Shared Library 616
SSamplingrate 548, 576Samplingtiefe 546, 548Sandbox 863Sandy 3D 849sans 258Sättigung 531save 761, 768scaleMode 481scaleX 367, 397scaleY 367, 397scaleZ 367, 397Schaltfläche 136
Aktiv 137Auf 137Darüber 137erstellen 137Gedrückt 137
Schlagschatten 531Schleifen 356, 552
Leistungsvergleich 358Schlüsselbild 155
Darstellungsweise 157
einfügen 156kopieren 158, 164leer 156löschen 156, 165Posenebene 235verschieben 158
Schneeflockensimulation 442Schreibregeln 270Schrift
Geräteschriften maskieren 260Darstellung 256eingebettete Schriften 263Feintuning 264Geräteschriftarten 258Pixelfonts 266
Schriftarteinbettung 643Schriftart-Klasse 642Schriftart-Symbol 642Schriftfarbe 249Schriftgröße 248, 642Schrifttypen TLF-Text 275Schriftwarnung 269Schriftzeichen in Vektoren
umwandeln 264Schriftzuordnung 269Schwarze Ränder 587Schwingende Bewegung 415Schwingung 415Screenreader 321Screensaver 847Screensaver Producer 848ScreenTime for Flash 848Scroller 646Scrollrad (Mac) 859scrollRect 441scrollTargetName 648SDK 836SecureSWF 856Security by obscurity 826SECURITY_ERROR 677, 768, 770SecurityErrorEvent.SECURITY_
ERROR 768, 770Security.sandboxType 856seek 603Segmentraster 118Sekunde 468SELECT 712, 758, 765, 770selectable 640selected 504send 857Sequenzen 432serif 258
890 | Index
Serifen 259Server Adminstration 702Serverseitige Skriptsprache 667SET 726setChildIndex 373setComponentStyle 512setPixel 540setPixel32 541setPixels 541setSelection 646setSize 441, 500, 736setStyle 511Setter 472setTextFormat 641, 646setVector 541SGML 668SHA1 827SHA256 827ShaderFilter 534Shape 338, 368shapeFlag 791Shared Library 144
Dateigröße 147Ladeverhalten 146
SharedObject 801shift 344shortRotation 441Sicherheit 697, 723, 771, 826, 855,
858, 859, 863Sicherheits-Sandbox 863Sichtbarkeit von Anzeigeobjekten
373Silbentrennung 252SimpleButton 369sin 428Sine 434Sinus 415size 512, 642, 770, 802Skalierbarkeit 31Skalierung 209
animieren 209Skelett
Animation 234Hierarchie 233
Skinning 498Skins 510, 512Skript-Höchstzeit 292, 357Skripthilfe 330
aktivieren/deaktivieren 333Skype 672slice 344Slider 569
Slideshow 503SlowMotion 816SMALLINT 706Smartphone 839smooth 485smoothing 537SOL 802Sonderzeichen 633songName 560sort 344, 345Sortierung 345, 745, 854
absteigend 346absteigend 345alphabetisch 346numerisch 345
sortOn 344, 345, 346, 746, 854sortXMLByNode 745Sothink SWF Decompiler 855Sound 545
abspielen 561ein- und ausblenden 555Ereignis 551Import 547in der Zeitleiste 551laden 559Lautstärke 568Lautstärke steuern 569mit ActionScript 557parallel steuern 564pausieren 566Schaltfläche 552Starten 551Stopp 552Stream 552Veröffentlichung 547
SoundChannel 561, 566SOUND_COMPLETE 562, 575Soundeffekte 554Soundeigenschaften 549Sound Forge 550Soundkanal 575SoundLoaderContext 562Soundloop 552, 561
als MP3 563SoundMixer 558, 575Sound-Player 573Soundspektrum 548, 575
darstellen 576Sound-Streaming 562soundTransform 574, 602, 605SoundTransform 559, 568Soundtypen 551
span 651SpanElement 656Speicher freigeben 379Spieleprogrammierung
Highscore 819Highscore-Sicherheit 826Interaktion 785Kollisionserkennung 789SharedObject 801Sound 806Zeit 799
Spiralenförmige Bewegung 423splice 344split 781Sprache 549Sprühen-Werkzeug 81Sprite 338, 368SQL 702SQL Development 702SQL Distinct 713SQL-INJECTION 720SQL-Injections 725sqrt 415, 428SQRT1_2 428SQRT2 428SQUARE 482SSL 698, 826stage 368Stage 365, 368Standard 705Standard-Komponenten 839Standardlayout wiederherstellen
61Stapelreihenfolge 121start 403startDrag 787Starten 551static 462Statische Textfelder 247Statusübergänge 839Sternform erstellen 99Steuerung der Zeitleiste 365Steuerungspunkte ausrichten 242Steuerung von Zeitleisten 364Stift 100Stiftwerkzeug
Ankerpunkte entfernen 101Ankerpunkte hinzufügen 101Ankerpunkte umwandeln 101Pfad schließen 101
Stile 510, 511stop 364, 365, 403, 574
Index | 891
stopAll 558stopDrag 788Stopp 552Stream 552Streaming 563, 582stretchFaktor 576Stricheigenschaften
Benutzerdefinierte Stile 76Farbe 76Höhe 76Stil 76
Strichfarbe 70, 76Strichhöhe 76Strichlinie
Abschluss 77begradigen 102entfernen 102glätten 102in Füllung umwandeln 75, 76Verbindung 77
Strichstil 76benutzerdefiniert 76
Strikte Typisierung 339String 338strip_slashes 724strip_tags 699Stärke des Weichzeichners 590Strong 434Struktur der Zeitleiste im XFL-For-
mat 324Strukturierung von Ebenen 152Stunde 468StyleManager 512subclass 475Subject 698Subtrahieren 531Subtraktion 348Suchen 333Suchen und Ersetzen 333, 709Suchmaschinen 303super 477superglobale Arrays 701Superklasse 475swapChildren 373SWC-Dateien 290SWD-Dateien 291SWF 382SWF-Decompiler 855SWF-Einbindungsmöglichkeiten
295SWF-Einstellungen 289SWF laden 382
SWFObject 295, 301align 312Einbindungsmethode 295FlashVars 305menu 311quality 311scale 312weitere Einstellungen 303wmode 312
SWF Protector 856SWF-Schutz 855SWF Screensaver for Mac 848SWF-Verlauf 43Swift 3D 850switch 351, 674Symbol-Bearbeitungsmodus 128Symbole 127
als Klasse 467an Position bearbeiten 132bearbeiten 132Begrenzungsrahmen 134duplizieren 133erstellen 128Grafik-Symbole 127Instanzeigenschaften 127, 131Instanzen 130in Symbol konvertieren 129konvertieren 129MovieClip-Symbole 127Positionierung 134Registrierung 129, 135Registrierung ändern 136Schaltflächen-Symbole 128Schriftart-Symbole 128Verschachtelung 127
Symbolinstanz 130Symboltyp 594Symmetriepinsel 83, 86Synchronisation 551Syntax überprüfen 333, 334Syntax-ToolTip 844System.useCodePage 632Szenen 158
ansteuern 160Bildbezeichner 159Dateigröße 159duplizieren 158erstellen 158vermeiden 159verwalten 158Vor- und Nachteile 159
Ttab 651Tabellen exportieren 708tabIndex 628, 639Tablet-PC 839tabstops 625Tabulator-Reihenfolge 628tan 428Tangens 428target 377, 642Tastatur 369, 381, 785Tastaturbefehle deaktivieren 785,
865Tastaturkurzbefehle 63
definieren 65Menü 64Standard wiederherstellen 66
Tastatursteuerung 785Tate Chu Yoko 617tcy 651Teilen 264Telefonnummer 665Tellerrand 833test 661Testen 550text 622, 639Text 243
als Grafik einfügen 265Anti-Aliasing 257Ausrichtung 251auswählbar 256Auszeichnungen 249Bitmap-Text 264Blocksatz 252Breite anpassen 244Dokument laden 631dynamische Textfelder 617dynamisch zuweisen/abfragen
622Eigenschaften 246Eingabe beenden 244Eingabefokus 629Eingabetextfelder 617eingebettete Zeichen 265E-Mail-Verknüpfung 255Farbe 248fehlende Schriften ersetzen 269Feld-Eigenschaften 637Felder mit ActionScript 637feste Breite 243Fettdruck 250Fluss steuern 649
892 | Index
formatieren 247Größe 248hoch-/tiefstellen 254HTML-Formatierungen 624HTML-Textfelder mit eingebetter
Schrift 623Kapitälchen 250Kontrast 249Kursiv 250laden 758linksbündig 251mehrspaltig 657mehrzeilig 243mit Anti-Aliasing 263mittig 251mit URL verknüpfen 254Neigung 246ohne Anti-Aliasing 264Rahmen 619rechtsbündig 251Rechtschreibprüfung 272reguläre Ausdrücke 661Richtung 254Rotation 245Schriftart 248Schriftart-Klasse 642Schriftart-Symbol 642Schriftfarbe 249Schriftgröße 248Scroller 646Skalierung 245Tabulator 628Textfeld-Methoden 645Textfeld-Typen 246TextFormat-Klasse 640Text Layout Framework (TLF) 649transformieren 245unerwünschte Schatten 266URL-Kodierung 633Zeichenabstand 253Zeicheneinbettung 620Zeichenkodierung 631Zeilenabstand 252Zeilenlänge 253zentriert 251
TEXT 678, 706textAlign 654textAlignLast 654textAlpha 655Textausrichtung TLF-Text 280Textbreite 244textColor 639
Text-Container 656textDecoration 655Textebenen 524, 527Texteingabefelder 247Textfeld-Eigenschaften 246, 637Textfeld-Methoden 645Textfeld-Typen 246
dynamisch 247Eingabefelder 247statisch 247
TextField 338, 369, 637TextFieldAutoSize.CENTER 638TextFieldAutoSize.LEFT 638TextFieldAutoSize.NONE 638TextFieldAutoSize.RIGHT 638TextFieldType.DYNAMIC 640TextFieldType.INPUT 640textflow 650TextFlow 650, 655textformat 625TextFormat 640
Eigenschaften 642TextFormatAlign.CENTER 642TextFormatAlign.JUSTIFY 642TextFormatAlign.LEFT 642TextFormatAlign.RIGHT 642textHeight 639textIndent 655Textknoten 741TextLayoutFormat 651Text Layout Framework 649
Eigenschaften 652mehrspaltiger Text 657Vererbung 652
Textrichtung 254textRotation 655Textscroller 646Text transformieren
Neigung 246Rotation 245Skalierung 245
textWidth 639Third Party Tools 842
RegEx 664Tiefenverwaltung 418TIFF 519TileList 504time 605, 606, 778TIME 706Timer 403, 470TIMER 403TimerEvent 471
TimerEvent.TIMER 403TIMESTAMP 706Timing 202tint 441Tintenfass 113TINYINT 706TINYTEXT 706TLF-ActionScript-Bibliothek 616TLF-Text 273
ausrichten 279, 280auswählbar 274bearbeitbar 274Container und Fluss 280Dateigröße 273Eigenschaften 274formatieren 275Formatierungseinstellungen 274Groß-/Kleinschreibung 275Grundlinienverschiebung 279Hyperlink und Ziel 275Ligaturen 276nur Lesen 274Schrifttypen 275Textfelder verbinden 282Umbruch 277Veröffentlichungseinstellungen
273vs. klassischer Text 273Ziffernbreite 276Ziffernschreibweise 276
TLF-Texterstellung 273TLF-Textfeld-Eigenschaften
Ausrichtung im Container 281Maximale Zeichen 281Spalten 281Textfarbe 282Verhalten 281Zellauffüllung 282
TLF-Textfelder miteinander verbinden 282
TLFTextField 637TLS 698to 432To 698togglePause 603toString 344track 560trackingLeft 655trackingRight 655Transformationsmatrix 495Transformieren, Text 245transformMatrix 441
Index | 893
Transparenz 70, 211Trigonometrie 412true 338TrueSpace 850try 813Tween 429
animieren 173an Pfad ausrichten 198Beschleunigung 178, 208Bewegungs-Editor 184Bewegungspfad 201Bewegungs-Tween 172Bewegungs-Tween erstellen 172Bewegungsvorstellungen 195Drehung 178eigenen Pfad erstellen 183Eigenschaften 177erstellen 175Formmarken 216Form-Tween 212Geschwindigkeit 180Instanzname 177klassische Tweens 172klassische vs. Bewegungs-Tweens
174Länge ändern 181Optionen 177Pfad 178verlängern 176
Tween-Engines 428Tweener 429TweenEvent.MOTION_START 429Tween-Klassen 428TweenLite 429, 430
3D-Flip 435Easing 433Ereignisse 434Methoden 430Plugins 438Schneeflockenanimation 442
TweenMax 429TweenNano 429TweenPlugin 438Tweens 172
Bewegung im Raum 209Tweensy 430Typ 705type 606, 640, 770Typenkonflikt 340typeof 340typewriter 258Typisierung 339
Uu 624Überlagern 530Überschreiben 477Übersichtlichkeit 454Überspringen 391UILoader 504uint 338UIScrollBar 646ul 624Ultrashock 498Umbruch TLF-Text 277Umkehren 531Umlaute 633
sortieren 854Umwandlung, Bitmap in Vektoren
214UND 353undefined 337, 394underline 512, 642Ungleich 350Unicode 631UniRed 632UNIX-Dateirechte 686Unix-Zeitstempel 778UNLOAD 384unshift 344UNSIGNED 705Unsigned Integer 338Unterauswahl-Werkzeug 103Unterklasse 475Unterschneidung 252, 642Unterstreichung 642, 655Untypisiert 337UPDATE 726updateAfterEvent 401, 487updateAllControllers 657upload 767, 768Upload 765UPLOAD_COMPLETE_DATA 770Upload-Fortschritt 774upload_max_filesize 777Upload-Skript 767url 573, 642urlencode 679URL-Encoding 679URL-Kodierung 633, 873URLLoader 632, 678, 684, 729URLLoaderDataFormat 633, 636URLLoaderDataFormat.BINARY
678URLLoaderDataFormat.TEXT 678
URLLoaderDataFormat.VARIABLES 678, 714
URLRequest 382, 632, 695URLRequestMethod.GET 687URLVariables 687URL verknüpfen mit Text 254useCodePage 632UTF-8 680, 870, 871, 872utf8_decode 680utf8_encode 680
VValidierung 731VARCHAR 706Variablen 336, 672Variablendefinition 466
doppelte 395Variablenzugriff aus Flash 305VARIABLES 678VBR, 2-Pass 591VBScript 667Vector 347Vektoren und Pixel 31Vektorgrafik 31Vektorkonturen 524Verbindungswinkel 482Vererbung 474, 652Veröffentlichen
ActionScript-Version 288Bilder und Sounds 288Ebenen ignorieren 154Flash 286Flash-Player-Version feststellen 294GIF 297Hardwarebeschleunigung 292HTML 293HTML-Ausrichtung 296, 312JPEG 299mit und ohne JavaScript 295PNG 300Skalierung 312SWF-Einbindungsmöglichkeiten
295SWF-Einstellungen 289SWFObject 295Version 286vor Import schützen 291
VeröffentlichungseinstellungenTLF-Text 273verwenden 521
Vergleichsoperatoren 349, 350Vergrößern 122
894 | Index
Verkleinern 122Verknüpfung 548, 644Verknüpfungsbezeichner 142Verlassen 391Verlaufsmasken 220
Beispiel 220Maskierung 223
Verlustbehaftet 519Verlustfrei (PNG/GIF) 519, 520Verschachtelung 166, 224
Beispiel 224Verschleierungstechnik 831Verschlüsselung 698, 827VERTICAL 481verticalAlign 655Vertikale Textrichtung 254Verzögerung und Bildrate 403Video 369, 597
Audio 592Audio-Export 589Audio-Spur steuern 602über ActionScript abspielen 599Beschnitt 587Export 586extern 597FLV in der Zeitleiste 594Import in Flash 592Kodierung 585Metadaten 591Vollbild 601Vorlagen 586Zeitleiste 588
Video-Containerformat 584Video for Flash 583Videoformate 583
Flash-Player-Versionen 584Video-Größe 586Video importieren 592Video-Objekt 597Video-Playback-Komponente 593Video-Player 584Video-Streaming 582visible 368, 438, 441, 640VLC Media Player 585void 361Vollbild 601volume 442, 568, 575, 602Voreinstellungen
Tween Bewegung 195Vorgabe 586Vorverarbeitung 549vspace 624
WW3C 297W3C-konforme Veröffentlichung
295W3C Validator 297Wasserhahn 94WAV 547Wavelab 550Webkit-Engine 835Webserver 668, 669Weichzeichnen 531Werkzeuge
3D-Drehungswerkzeug 1093D-Versetzungswerkzeug 110Deko 83Sprühen 81
Werkzeugleiste 51, 329Darstellung 52ein-/ausblenden 333Wasserhahn 94
WHERE 712, 726while 356, 674whiteSpaceCollapse 655width 367, 397, 637Wiederherstellung 855Wiederholungen 552willTrigger 379Windows Media-Datei 583Winkel 413, 424Winkelberechnung 424Wireframe 839Wireshark 688wmode 312Wohlgeformtheit 729, 730wordWrap 640World Wide Web Consortium 297Wowza Media Server 582
Xx 367, 368, 397, 637XAMPP 668
Control-Panel 670installieren 669
XARA 3D 850XFL-Datei 322
Grafiken aktualisieren 323speichern 322, 323Struktur der Zeitleiste 324Vorteile 323Wirksamwerden von Änderungen
323XML 658, 727, 820
bearbeiten 741Definition 727Elemente entfernen 743Elemente hinzufügen 741Formatierungen 738Kommentare 731laden 729sortieren 745Sortierung (nach Attribut) 747speichern 748
XMLList 733XML-Parser 729XMP 591XOR 354
Yy 367, 368, 397, 637Yahoo Astra Components 498year 560YEAR 706Yudit 632
Zz 367, 368, 397, 637z-Achse 418Zauberstab 105
Einstellungen 105Zeichenabstand 252Zeicheneinbettung 620Zeichenkette 338Zeichenkodierung 631, 680Zeichenmodi, Objektzeichnung 70Zeichentabelle 870, 871, 872Zeichentablett 79Zeichenwerkzeuge 70
Ankerpunkt entfernen 104Auswahl-Werkzeug 102Eigenschaften ändern 75Ellipsenwerkzeug 97Farbeimerwerkzeug 113Farbverlaufwerkzeug 117Freihandwerkzeug 78Lassowerkzeug 104Linienwerkzeug 74Pinsel-Werkzeug 79Pipette 114Polysternwerkzeug 99Radiergummi 94Rechteckwerkzeug 95Stiftwerkzeug 100Stricheigenschaften 75Strich- und Füllfarbe 70
Index | 895
Tintenfasswerkzeug 113Unterauswahl-Werkzeug 103Werkzeug für Ellipsengrundform
98Werkzeug für Rechteckgrundform
96Zeichnungs-API 479Zeilenabstand 252Zeilenfall 251Zeilenkommentar anwenden 333Zeilenlänge 252
Richtwert 253Zeilentyp 618
Zeilenumbruch 651Zeit 675, 799Zeitleiste 54, 149
bei Bedarf erweitern 595Bildbezeichner 159Bilder 155Darstellungsoptionen 157Steuerung 364
Zeitleistensteuerung 365Zeitstempel 681, 820Zellauffüllung TLF-Text 282Zielpfad einfügen 333Ziffernbreite TLF-Text 276
Ziffernschreibweise TLF-Text 276ZINC 848Zoom 77Zufall 427Zugänglichkeit 321Zwiebelschaleneffekt 170
aktivieren 170Anwendungsbereich 170Konturansicht 171mehrere Bilder bearbeiten 171verankern 170
Zwischen Klammern ausblenden 333
Recommended