Nick Weschkalnies, Sven Gasser

Adobe Flash CS5

Das umfassende Handbuch Auf einen Blick

Vorwort...... 21

Teil I Grundlagen...... 27 1 Was ist Flash?...... 29 2 Arbeitsumgebung...... 45

Teil II Anwendung...... 67 AUF EINEN BLICK 3 Zeichnen...... 69 4 Symbole, Instanzen und die Bibliothek...... 127 5 Animation...... 149 6 Text...... 243 7 Veröffentlichung...... 285

Teil III ActionScript...... 325 8 ActionScript-Grundlagen...... 327 9 Animation mit ActionScript...... 397 10 Einführung in die objekt­orientierte Programmierung...... 445 11 Zeichnungs-API...... 479 12 Komponenten...... 497

Teil IV Multimedia und dynamische Inhalte...... 517 13 Bitmaps...... 519 14 Sound...... 545 15 Video...... 581 16 Dynamischer Text...... 615 17 Flash, PHP und MySQL...... 667 18 XML...... 727 19 FileReference...... 757

Teil V Weitere Einsatzgebiete...... 783 20 Spieleprogrammierung...... 785 21 Ein Blick über den Tellerrand...... 833

Teil VI Anhang...... 851 A FAQ...... 853 B Key-Codes der Key-Klasse...... 865 C Unicode (Lateinisch einfach)...... 869 D URL-Kodierung...... 873 E Die DVD zum Buch...... 875

Auf einen Blick | 3 Inhalt

Vorwort...... 21

Teil I Grundlagen

1 Was ist Flash?...... 29 1.1 Flash-Historie...... 29 1.2 Entwicklungsumgebung, Player und Projektor...... 29 1.3 Vektoren und Pixel...... 31 1.4 Anwendungsbereiche...... 32 1.5 Neues in Flash CS5...... 37

2 Arbeitsumgebung...... 45 2.1 Begrüßungsbildschirm...... 45 2.2 Die Entwicklungsumgebung...... 46 2.3 Die Menüleiste...... 47 2.4 Die Werkzeugleiste...... 51 2.5 Die Zeitleiste...... 54 2.6 Die Bühne...... 55 2.7 Entwicklungsumgebung anpassen...... 57 2.8 Tastaturkurzbefehle...... 63

Teil II Anwendung

3 Zeichnen...... 69 3.1 Zeichenmodi...... 69 3.2 Zeichenwerkzeuge...... 70 3.2.1 Strich- und Füllfarbe...... 70 3.2.2 Farbpalette bearbeiten...... 72 3.2.3 Kuler-Bedienfeld...... 73 3.2.4 Linienwerkzeug...... 74 3.2.5 Eigenschaften ändern...... 75 3.2.6 Stricheigenschaften...... 75 3.2.7 Freihandwerkzeug...... 78 3.2.8 Pinsel-Werkzeug...... 79 3.2.9 Sprühen-Werkzeug...... 81 3.2.10 Deko-Werkzeug...... 83 3.2.11 Radiergummiwerkzeug...... 93 3.2.12 Rechteckwerkzeug...... 95 3.2.13 Werkzeug für Rechteckgrundform...... 96

4 | Inhalt 3.2.14 Ellipsenwerkzeug...... 97 3.2.15 Werkzeug für Ellipsengrundform...... 98

3.2.16 Polysternwerkzeug...... 99 INHALT 3.2.17 Stiftwerkzeug...... 100 3.3 Objekte auswählen und bearbeiten...... 102 3.3.1 Auswahlwerkzeug...... 102 3.3.2 Unterauswahl-Werkzeug...... 103 3.3.3 Lassowerkzeug...... 104 3.4 Transformationen...... 107 3.4.1 Frei-transformieren-Werkzeug...... 108 3.4.2 3D-Drehungswerkzeug...... 109 3.4.3 3D-Versetzungswerkzeug...... 110 3.4.4 Fluchtpunkt und Perspektive...... 111 3.5 Farben und Farbverläufe erstellen...... 113 3.5.1 Tintenfass- und Farbeimerwerkzeug...... 113 3.5.2 Pipette...... 114 3.5.3 Farbverläufe...... 115 3.5.4 Bitmap-Füllung...... 116 3.5.5 Farbverlaufwerkzeug...... 117 3.6 Hilfswerkzeuge...... 118 3.6.1 Skalierung mit dem 9-teiligen Segmentraster....118 3.6.2 Objekte gruppieren und anordnen...... 120 3.6.3 Handwerkzeug...... 121 3.6.4 Zoomwerkzeug...... 122 3.6.5 Lineale...... 122 3.6.6 Hilfslinien...... 123 3.6.7 Raster...... 125

4 Symbole, Instanzen und die Bibliothek...... 127 4.1 Symbole...... 127 4.2 Symbole erstellen...... 128 4.3 Symbolinstanzen...... 130 4.4 Schaltflächen...... 136 4.5 Bibliothek...... 141 4.5.1 Bibliothekselemente löschen...... 142 4.5.2 Ordnung und Struktur in der Bibliothek...... 142 4.6 Gemeinsam genutzte Bibliothek (Shared Library)...... 144

5 Animation...... 149 5.1 Zeitleiste...... 149 5.1.1 Ebenenmodell...... 150 5.1.2 Mit Ebenen arbeiten...... 150 5.1.3 Bilder und Schlüsselbilder auf der Zeitleiste....155 5.1.4 Darstellungsoptionen der Zeitleiste...... 157

Inhalt | 5 5.1.5 Szenen und Bildbezeichner...... 158 5.2 Bild-für-Bild-Animation...... 160 5.3 Zwiebelschaleneffekt...... 170 5.4 Tweens...... 172 5.4.1 Bewegungs-Tween erstellen...... 172 5.4.2 Eigenschaften animieren...... 173 5.4.3 Pfad eines Bewegungs-Tween...... 178 5.4.4 Bewegungs-Editor...... 184 5.4.5 Bewegungsvoreinstellungen...... 195 5.4.6 Animation kopieren und einfügen...... 196 5.5 Klassische Tweens...... 197 5.5.1 Klassische Tweens an Pfad ausrichten...... 198 5.5.2 Timing...... 202 5.6 Weitere Eigenschaften animieren...... 209 5.7 Form-Tweens...... 212 5.7.1 Bitmaps in Vektoren umwandeln...... 212 5.7.2 Formmarken einsetzen...... 216 5.8 Masken...... 218 5.9 Verschachtelung...... 224 5.10 Inverse Kinematik...... 230 5.10.1 Bone-Werkzeug...... 231 5.10.2 Bindungswerkzeug...... 240 5.10.3 Steuerungspunkte ausrichten...... 242

6 Text...... 243 6.1 Klassische Texterstellung in Flash...... 243 6.1.1 Textbreite anpassen...... 244 6.1.2 Text transformieren...... 245 6.2 Textfeld-Eigenschaften...... 246 6.2.1 Textfeld-Typen...... 246 6.2.2 Text formatieren...... 247 6.2.3 Schriftart, -größe und -farbe...... 248 6.2.4 Auszeichnungen...... 249 6.2.5 Ausrichtung...... 251 6.2.6 Zeilenabstand, Zeilenlänge, Zeichenabstand....252 6.2.7 Textrichtung...... 254 6.2.8 Text mit URL verknüpfen...... 254 6.2.9 Auswählbarer Text...... 256 6.3 Darstellung von Schrift...... 256 6.3.1 Geräteschriftarten...... 258 6.3.2 Maskierung von Geräteschriftarten...... 259 6.3.3 Eingebettete Schriften...... 263 6.3.4 Bitmap-Text...... 264 6.3.5 Text als Grafik einfügen...... 265

6 | Inhalt 6.3.6 Pixelfonts...... 266 6.3.7 Fehlende Schriften ersetzen...... 269

6.4 Schreibregeln...... 270 INHALT 6.5 TLF-Texterstellung in Flash...... 273 6.5.1 TLF-Textfeld-Eigenschaften...... 274 6.5.2 TLF-Textfeld formatieren...... 275 6.5.3 TLF-Textfeld-Eigenschaften »Erweitert – Zeichen«...... 275 6.5.4 TLF-Textfeld-Eigenschaften »Absatz«...... 279 6.5.5 TLF-Textfeld-Eigenschaften »Container und Fluss«...... 280

7 Veröffentlichung...... 285 7.1 Veröffentlichungseinstellungen...... 285 7.1.1 Flash-Export (SWF) ...... 286 7.1.2 HTML-Export...... 293 7.1.3 GIF-Export...... 297 7.1.4 JPEG-Export...... 299 7.1.5 PNG-Export...... 300 7.2 Einbettung mit dem SWFObject...... 301 7.2.1 Express Install...... 303 7.2.2 FlashVars...... 305 7.2.3 Parameter...... 309 7.3 Ladeverhalten von Flash-Filmen...... 313 7.4 Positionierung per CSS...... 315 7.4.1 CSS erstellen...... 316 7.4.2 Flash-Film mittig positionieren...... 316 7.4.3 Flash-Film am oberen und unteren Rand mittig positionieren...... 318 7.5 Export...... 320 7.6 Eingabehilfen...... 321 7.6.1 Fenster »Eingabehilfen«...... 321 7.6.2 Eingabehilfe für Symbole...... 322 7.7 FLA-Datei als XFL-Datei speichern...... 322 7.7.1 Speichern als XFL-Dokument...... 323 7.7.2 Aktualisieren von Grafikmaterial...... 323

Teil III ActionScript

8 ActionScript-Grundlagen...... 327 8.1 ActionScript-Versionen...... 327 8.2 ActionScript-Editor...... 329 8.2.2 Skripthilfe und Experten-Modus...... 330

Inhalt | 7 8.2.3 Codefragmente...... 331 8.2.4 Funktionen des ActionScript-Editors...... 332 8.3 Mein erstes Skript...... 335 8.4 Variablen...... 336 8.5 Datentypen...... 338 8.5.1 Strikte Typisierung und lose Typisierung...... 339 8.5.2 Datentypen umwandeln...... 340 8.5.3 Geltungsbereich...... 342 8.6 Arrays...... 343 8.6.1 Indizierte Arrays...... 343 8.6.2 Assoziative Arrays...... 344 8.6.3 Mehrdimensionale Arrays...... 345 8.6.4 Arrays sortieren...... 345 8.6.5 Typisiertes Array: Vector...... 347 8.7 Einfache Operatoren...... 348 8.7.1 Arithmetische Operatoren...... 348 8.7.2 Vergleichsoperatoren und Fallunterscheidung...... 349 8.7.3 Logische Operatoren...... 352 8.8 Bitweise Operatoren...... 353 8.9 Schleifen...... 355 8.9.1 while-Schleife...... 356 8.9.2 do-while-Schleife...... 358 8.9.3 for-Schleife...... 358 8.9.4 for-in-Schleife...... 359 8.9.5 for-each-in-Schleife...... 360 8.10 Funktionen...... 360 8.11 Steuerung von Zeitleisten...... 364 8.12 Anzeigeliste...... 366 8.12.1 Anzeigeklassen...... 366 8.12.2 Anzeigeobjekte referenzieren...... 369 8.12.3 Anzeigeobjekte hinzufügen und entfernen..... 370 8.12.4 Anzeigeobjekte aus dem Speicher entfernen....372 8.12.5 Reihenfolge in der Anzeigeliste ändern...... 373 8.12.6 Struktur einer Anzeigeliste...... 373 8.12.7 Instanzen aus der Bibliothek erzeugen...... 374 8.13 Ereignisse...... 376 8.13.1 Ereignisse, Ereignis-Listener und Ereignisprozeduren...... 376 8.13.2 target und currentTarget...... 377 8.13.3 Ereignis-Listener entfernen...... 378 8.13.4 Häufig verwendete Ereignisse mit Anzeigeobjekten...... 380 8.14 Loader...... 382

8 | Inhalt 8.15 Fehlersuche...... 389 8.15.1 Anwendung...... 389

8.15.2 Haltepunkte...... 390 INHALT 8.15.3 Debug-Konsole...... 390 8.15.4 Remote-Debug...... 391 8.15.5 Häufige Fehlerursachen...... 394

9 Animation mit ActionScript...... 397 9.1 Eigenschaften von Anzeigeobjekten...... 397 9.2 Ereignisse...... 398 9.2.1 ENTER_FRAME...... 398 9.2.2 MOUSE_MOVE...... 401 9.3 Timer...... 403 9.4 Geschwindigkeit und Beschleunigung...... 404 9.5 Easing...... 406 9.5.1 Bewegung...... 406 9.5.2 Weitere Instanzeigenschaften animieren...... 408 9.5.3 Animation beenden oder loopen...... 409 9.6 Trigonometrie...... 412 9.6.1 Koordinatensystem...... 412 9.6.2 Winkelangabe...... 413 9.6.3 Grad- und Bogenmaß – Umrechnung...... 413 9.6.4 Das rechtwinklige Dreieck...... 414 9.6.5 Schwingende Bewegung...... 415 9.6.6 Kreisbewegung...... 422 9.6.7 Winkel zwischen zwei Punkten berechnen..... 424 9.7 Tween-Engines...... 428 9.7.1 Adobes Tween-Klasse...... 429 9.7.2 Tween-Engines...... 429 9.7.3 TweenLite...... 430 9.7.4 TweenLite-Plugins...... 438

10 Einführung in die objekt­orientierte Programmierung...... 445 10.1 Die Welt der Objekte...... 447 10.2 Klassen und Objekte...... 448 10.2.1 Klassenbezeichner und Dateiname...... 448 10.2.2 Klassendefinition und Konstruktor...... 449 10.2.3 Objekt initialisieren...... 450 10.3 Eigenschaften...... 451 10.4 Methoden...... 452 10.5 Paket- und Klassenpfad...... 453 10.5.1 Pakete und Klassen importieren...... 454 10.5.2 Eigene Pakete und Klassenpfade...... 456

Inhalt | 9 10.5.3 Objektorientierte Projekte mit dem Projekt-Fenster verwalten...... 457 10.6 Sichtbarkeit...... 460 10.7 Instanz- und Klassenmitglieder...... 462 10.8 Dokumentklasse...... 464 10.9 Symbole als Klasse...... 467 10.10 Getter-/Setter-Methoden...... 472 10.10.1 Getter-Methode...... 472 10.10.2 Setter-Methode...... 473 10.11 Vererbung...... 474 10.11.1 Methoden und Eigenschaften der Superklasse ansteuern...... 477 10.11.2 Methoden und Eigenschaften einer Basisklasse überschreiben...... 477

11 Zeichnungs-API...... 479 11.1 Graphics-Klasse...... 479 11.2 Anzeigeobjekt erstellen...... 479 11.2.1 Linien zeichnen...... 480 11.2.2 Bitmap-Linien zeichnen...... 485 11.2.3 Kurven zeichnen...... 485 11.2.4 Füllungen erzeugen...... 487 11.2.5 Rechteck zeichnen...... 488 11.2.6 Rechteck mit abgerundeten Ecken zeichnen....493 11.2.7 Kreis zeichnen...... 494 11.2.8 Ellipse zeichnen...... 494 11.2.9 Farbverlaufslinien und -füllungen erzeugen.... 494

12 Komponenten...... 497 12.1 Einführung...... 497 12.2 Anwendung...... 498 12.2.1 Komponenten in der Entwicklungs­- umgebung...... 498 12.2.2 Komponenten mit ActionScript erzeugen...... 500 12.2.3 Komponenten über ActionScript ansteuern....501 12.2.4 Eigenschaften...... 502 12.2.5 Methoden...... 502 12.2.6 Ereignisse...... 503 12.3 Erscheinungsbild anpassen...... 510 12.4 Stile...... 511 12.4.1 Komponenteninstanzen anpassen...... 511 12.4.2 Komponententyp anpassen...... 511 12.5 Skins...... 512

10 | Inhalt 12.5.1 Skin eines Komponententyps anpassen...... 513 12.5.2 Skin einer Komponenteninstanz anpassen..... 514 INHALT

Teil IV Multimedia und dynamische Inhalte

13 Bitmaps...... 519 13.1 Bitmap-Import...... 519 13.2 Photoshop-Import...... 522 13.2.1 Bildebenen...... 523 13.2.2 Textebenen...... 524 13.3 Illustrator-Import...... 525 13.3.1 Bildebenen...... 527 13.3.2 Textebenen...... 527 13.3.3 Pfade...... 528 13.4 FXG...... 528 13.5 Mischmodi und Filter...... 529 13.5.1 Bitmap-Filter anwenden...... 531 13.5.2 Bitmap-Filter animieren...... 532 13.6 Mischmodi und Bitmap-Filter mit ActionScript...... 533 13.6.1 Mischmodi...... 533 13.6.2 Bitmap-Filter...... 533 13.7 Bitmaps mit ActionScript...... 536 13.7.1 Bitmap-Klasse...... 536 13.7.2 BitmapData-Klasse...... 537 13.7.3 Pixel einer Bitmap auslesen und setzen...... 538

14 Sound...... 545 14.1 Hintergrundwissen...... 545 14.2 Import und Veröffentlichung...... 547 14.2.1 Veröffentlichungseinstellungen...... 547 14.2.2 Tipps für den Import...... 550 14.3 Sound in der Zeitleiste...... 551 14.3.1 Soundtypen...... 551 14.3.2 Soundeffekte...... 554 14.4 Sounds mit ActionScript...... 557 14.4.1 Sound-Klasse...... 558 14.4.2 Sound laden...... 559 14.4.3 Sound abspielen...... 561 14.4.4 Sound-Streaming steuern...... 562 14.4.5 Sound pausieren...... 566 14.4.6 Soundlautstärke...... 568 14.5 Soundspektrum...... 575

Inhalt | 11 15 Video...... 581 15.1 Techniken zur Bereitstellung...... 581 15.2 Adobe Media Encoder...... 583 15.2.1 Video-Format...... 583 15.2.2 Kodierung...... 585 15.2.3 Exporteinstellungen...... 586 15.3 Video-Import in Flash...... 592 15.3.1 Video-Playback-Komponente...... 593 15.3.2 FLV in Zeitleiste integrieren und abspielen..... 594 15.4 Video-Anwendung...... 595 15.4.1 Eingebettete Videos...... 595 15.4.2 Externe Videos...... 597 15.4.3 Vollbild-Modus...... 601 15.4.4 Audio-Spur eines Videos steuern...... 602 15.4.5 Eigenschaften der NetStream-Klasse...... 603 15.4.6 Cue-Points...... 605

16 Dynamischer Text...... 615 16.1 Klassischer Text oder TLF-Text?...... 615 16.2 Dynamische Textfelder und ­Eingabetextfelder...... 617 16.2.1 Textfeld-Einstellungen...... 618 16.2.2 Zeicheneinbettung...... 620 16.3 Text zuweisen und abfragen...... 622 16.3.1 Tabulator-Reihenfolge...... 628 16.3.2 Eingabefokus...... 629 16.4 Textdokument laden und ausgeben...... 631 16.4.1 Zeichenkodierung...... 631 16.4.2 Textdokumente laden...... 632 16.5 Textfelder mit ActionScript steuern...... 637 16.5.1 Textfeld-Eigenschaften...... 637 16.5.2 TextFormat...... 640 16.5.3 Schriftart-Symbol und Schriftart-Klasse...... 642 16.5.4 Textfeld-Methoden...... 645 16.6 Textscroller – die UIScrollBarKomponente...... 646 16.6.1 Textbereich definieren...... 647 16.6.2 Bildlauf aktivieren...... 647 16.6.3 UIScrollBar-Komponente einfügen...... 648 16.6.4 Ziel der Scroller-Komponente festlegen...... 648 16.7 Text Layout Framework...... 649 16.7.1 Text Layout Framework und MVC Design Pattern...... 649 16.7.2 Hierarchische Struktur...... 650 16.7.3 TextLayoutFormat...... 651 16.7.4 ParagraphElement...... 655

12 | Inhalt 16.7.5 SpanElement...... 656 16.7.6 Text-Container...... 656

16.7.7 Mehrspaltiger Text...... 657 INHALT 16.8 Reguläre Ausdrücke...... 661 16.8.1 RegExp-Klasse...... 661 16.8.2 Methoden der RegExp-Klasse...... 661 16.8.3 Text ersetzen...... 662 16.8.4 Beispiele...... 663

17 Flash, PHP und MySQL...... 667 17.1 PHP...... 667 17.1.1 Voraussetzungen...... 668 17.1.2 Lokaler Webserver...... 669 17.1.3 Sprachelemente und Syntax...... 672 17.1.4 Datums- und Zeitfunktion...... 675 17.1.5 Daten in Flash empfangen...... 677 17.1.6 Daten von Flash an PHP senden und wieder ­empfangen...... 684 17.1.7 Ein Kontaktformular erstellen...... 689 17.1.8 Sicherheit...... 697 17.1.9 PHP-Skripte testen und Fehlermeldungen...... 700 17.2 MySQL...... 701 17.2.1 phpMyAdmin...... 703 17.2.2 Datenbank erstellen...... 703 17.2.3 Datenbanktabelle erstellen...... 704 17.2.4 Tabellenspalten definieren...... 704 17.2.5 Datentypen...... 705 17.2.6 Felder bearbeiten, löschen und hinzufügen.... 706 17.2.7 Datensätze einfügen...... 707 17.2.8 Tabellen exportieren...... 708 17.2.9 Tabellen importieren...... 710 17.3 PHP und MySQL im Team...... 710 17.3.1 Datenbank-Login...... 710 17.3.2 Datenbankverbindung herstellen...... 711 17.3.3 Daten an Flash übergeben...... 713 17.3.4 Datenbanksätze einfügen...... 720 17.3.5 Sicherheit...... 723 17.3.6 Datensätze aktualisieren...... 726

18 XML...... 727 18.1 XML definieren...... 727 18.2 XML-Dokument laden...... 729 18.2.1 Wohlgeformtheit...... 730 18.2.2 Kommentare...... 731

Inhalt | 13 18.2.3 Anzahl von Elementen...... 731 18.2.4 Daten filtern...... 732 18.3 Formatierungen in XML...... 738 18.4 XML bearbeiten...... 741 18.4.1 Elementwerte ändern...... 741 18.4.2 Elemente hinzufügen...... 741 18.4.3 Elemente entfernen...... 743 18.5 XML sortieren...... 745 18.5.1 XML nach Knoten sortieren...... 745 18.5.2 XML nach Attribut sortieren...... 747 18.6 XML speichern...... 748

19 FileReference...... 757 19.1 Öffnen und Speichern...... 757 19.2 Download...... 761 19.3 Upload...... 765 19.3.1 Methoden...... 767 19.3.2 Ereignis-Listener...... 768 19.3.3 Eigenschaften...... 770 19.3.4 Dateiendungen überprüfen...... 771 19.3.5 Upload – FAQ...... 777

Teil V Weitere Einsatzgebiete

20 Spieleprogrammierung...... 785 20.1 Interaktion...... 785 20.1.1 Tastatursteuerung...... 785 20.1.2 Maussteuerung...... 787 20.2 Kollisionserkennung...... 789 20.2.1 Einfache Kollisionserkennung mit hitTestObject und hitTestPoint...... 789 20.2.2 Pixelbasierte Kollisionserkennung...... 792 20.2.3 Positionsbasierte Kollisionserkennung...... 796 20.3 Zeit...... 799 20.4 Daten lokal speichern mit einem ­SharedObject...... 801 20.5 Asteroids-Spiel...... 804 20.5.1 Startbildschirm...... 805 20.5.2 Soundobjekte initialisieren...... 806 20.5.3 Spielvariablen initialisieren...... 806 20.5.4 Raumschiffsteuerung...... 807 20.5.5 Feuer frei...... 808 20.5.6 Asteroiden erzeugen...... 810

14 | Inhalt 20.5.7 Bewegung und Kollisionserkennung der Asteroiden...... 813

20.5.8 Schwierigkeitsgrad erhöhen...... 814 INHALT 20.5.9 Schussenergie aufladen...... 814 20.5.10 Lebenspunkte erzeugen...... 814 20.5.11 SlowMotion-Punkte erzeugen...... 816 20.5.12 Spiel beenden...... 817 20.6 Verbesserungen...... 819 20.7 Highscore...... 819 20.7.1 Highscore laden...... 820 20.7.2 Highscore aktualisieren und speichern...... 821 20.7.3 Highscore darstellen...... 824 20.7.4 Spiel neu starten...... 825 20.8 Highscore-Sicherheit...... 826 20.8.1 Hashfunktion verwenden...... 827 20.8.2 Zeitpunkte in einem Array speichern...... 827 20.8.3 Hashwerte erzeugen...... 828 20.8.4 Analyse der Verschleierungstechnik...... 831

21 Ein Blick über den Tellerrand...... 833 21.1 Adobe AIR...... 833 21.1.1 Programmierung mit AIR...... 834 21.1.2 2.0-Update...... 834 21.2 Adobe Flex...... 835 21.3 Catalyst...... 837 21.4 Mobile Endgeräte...... 839 21.4.1 ...... 840 21.4.2 CS5...... 841 21.5 Third-Party-Tools...... 842 21.5.1 ActionScript-Entwicklungsumgebungen...... 842 21.5.2 Bildschirmschoner...... 847 21.5.3 Native Desktop-Anwendungen...... 848 21.5.4 3D-Animationen...... 849

Teil VI Anhang

A FAQ...... 853 B Key-Codes der Key-Klasse...... 865 C Unicode (Lateinisch einfach)...... 869 D URL-Kodierung...... 873 E Die DVD zum Buch...... 875

Index ...... 877

Inhalt | 15 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 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.]

16 | Video-Lektionen

Animation Bibliothek die und Instanzen Symbole, Zeichnen E E E E E E E E E Arbeitsumgebung Workshops E E E E E E E E E E E E E E E Veröffentlichung Text E E E E E E E E E E E E E E E E E E E E E E E E klassischen Tween klassischen beschleunigten einem mit Motorrad fahrendes Ein Klassisches Tween mit Beschleunigung und Abbremsung Tween Klassisches ausrichten Pfad an nutzen Bewegungs-Editor im Beschleunigung einsetzen Bewegungs-Editor Den erstellen Pfades eines entlang Animation Eine Bewegungs-Tweening Ein erstellen ändern Geschwindigkeit Animation in MovieClip verschachteln MovieClip in Animation anlegen Animation Die erstellen Schaltfläche Eine ändern Instanzeigenschaften Farben einer umgewandelten Bitmap-Grafik austauschen Tastenkürzel Eigene definieren Flash-Film mittig im Browser zentrieren Browser im mittig Flash-Film FlashVarseinsetzen Textfelderverbinden miteinander Geräteschriften von Maskierung Kinematik inverser mit Charakteranimation Maskeneffekt mit VerschachtelungGalerie einer in Verlaufsmaskeerstellen Form-Tween einen für Formmarken einsetzen Vektoren in Bitmap umwandeln klassischem beschleunigtem mit Ball springender Ein Tween ......

......

...... 168 206 199 137 162 307 316 220 224 188 192 180 175 166 208 131 282 260 235 216 213 203 105 65 Workshops

|

17

WORKSHOPS ActionScript-Grundlagen EE Navigation mit externen Flash-Filmen...... 384 EE Remote-Debugging mit dem »De MonsterDebugger«...... 392

Animation mit ActionScript EE Animation mit Event.ENTER_FRAME-Ereignis...... 400 EE Animation mit MouseEvent.MOUSE_MOVE-Ereignis...... 402 EE Bewegung mit Easing...... 407 EE FadeOut mit Easing...... 408 EE Animation beenden...... 410 EE Fading-Animation loopen...... 411 EE Schwingende Bewegung auf der x-Achse...... 415 EE Schwingende Bewegung auf der y-Achse...... 417 EE 3D-Bewegung und Tiefenänderung...... 419 EE Kreis- und ellipsenförmige Bewegung...... 422 EE Spiralenförmige Bewegung...... 423 EE MovieClip in Mausrichtung drehen...... 424 EE MovieClip in Mausrichtung bewegen...... 425 EE 3D-Flip mit TweenLite...... 435 EE Schneeflockensimulation mit TweenLite...... 442

Einführung in die objekt­orientierte Programmierung EE Klasse und Objekt erstellen...... 450 EE Eine analoge Uhr erstellen...... 468

Zeichnungs-API EE Interaktive Linie zeichnen...... 482 EE Interaktive Kurve zeichnen...... 486 EE Interaktives Zeichnen von Rechtecken...... 488

Komponenten EE Gallery mit Slideshow-Funktion mithilfe von Komponenten...... 503

Bitmaps EE Bitmap-Filter mit ActionScript steuern...... 534 EE Farbwerte einer Bitmap auslesen...... 548 EE Kreispunkt-Muster mit setPixel erzeugen...... 541

Sound EE Eine Schaltfläche mit Sounds versehen...... 552 EE Einen Streaming-Sound ein- und ausblenden...... 555

18 | Workshops

MySQL und PHP Flash, E E E E E E E E E E E E E E E E E E E E E E E E Video XML Text Dynamischer E E E E E E E E E E E E E E E E E E E E E E E E Ein eingebettetes Video über die Zeit Video die über eingebettetes Ein Sounds abspielenden eines Soundspektrum Das steuern Slider einen über Soundlautstärke abspielen und pausieren Sound stoppen und abspielen zuweisen, MehrereSounds übergeben RSS-Feed serverseitig einlesen und an den Flash-Film Flash-Film den an und einlesen serverseitig RSS-Feed Flash Feedsin des Daten und einlesen RSS-Feed SQL-Injections – verhindern Gästebuch und übergeben PHP an Flash von Daten – Gästebuch Gästebuch – Datensätze auslesen und in Flash darstellen PHP-Skript – Kontaktformular Sicherheitsfunktionen mit PHP-Skript – Kontaktformular Mailversand den für senden PHP-Skript ein an Kontaktdaten – Kontaktformular Kontaktformular – Eingabe überprüfen und zurücksetzen ausgeben Flash in Zeit und Datum Serverseitiges Text Mehrspaltigen des mithilfe ActionScript über Textdokumentausgeben und laden FocusEvent.FOCUS_OUT und FocusEvent.FOCUS_IN Texteingabeausgeben und abfragen einsetzen Navigation-Cue-Points Ereignis-Cue-Pointseinsetzen steuern und abspielen Video ActionScript Ein über XML-Dokument laden, ändern und mittels eines eines mittels und ändern XML-Dokumentladen, HTML-FormatierungenXML-Knoten in integrieren darstellen versehen erstellen Texterzeugen Frameworks Layout nutzen Eingabetextfeldern von Hervorhebung zur auslesen und grafisch darstellen grafisch und auslesen serverseitigen Skripts wieder speichern wieder Skripts serverseitigen erstellen Datensätze ...... leiste steuern ­leiste ......

......

......

......

......

564 737 693 626 607 696 734 699 658 595 576 569 566 725 720 682 635 611 599 629 739 748 715 690 Workshops

|

19

WORKSHOPS FileReference EE Ein Textdokument in den Flash Player laden und ausgeben...... 758 EE Daten lokal abspeichern...... 760 EE Download via FileReference-Klasse mit Fortschrittsbalken...... 763 EE Die Upload-Methode nutzen und Dateien clientseitig auf ihre Dateiendungen hin überprüfen...... 771 EE Den Fortschritt des Upload-Vorgangs anzeigen...... 774 EE Upload: Dateiendung serverseitig überprüfen...... 776

Spieleprogrammierung EE Kollisionserkennung mit Randbereichen und Bouncing...... 799 EE Spielername lokal speichern und lesen...... 803

20 | Workshops Vorwort 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.:

Vorwort | 21 EE Animationen EE Text und Textgestaltung (inklusive Einführung in das Text Layout Framework) EE ActionScript-Grundlagen EE Einführung in die objektorientierte Programmierung EE Zeichnen und Zeichnen mit ActionScript EE Komponenten EE Bitmaps EE Sounds EE Videos EE PHP, MySQL und die Zusammenarbeit mit Flash EE XML EE FileReference EE Spieleentwicklung EE 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.

Zielgruppe Das 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.

22 | Vorwort Workshops Die Workshops zu den jeweiligen Themen wurden so gewählt, Alle Workshops finden Sie dass sie einerseits den Anspruch erfüllen, zu den zuvor ausführ- auch auf der Buch-DVD. Genau- lich erläuterten Grundlagen praktische Beispiele zu zeigen, und ere Informationen hierzu erhalten Sie in Anhang E. 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 Zusammenarbeit EE 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-

Vorwort | 23 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 haben EE Anja Riehl für ihre Grafiken EE Henning Stein für seine stilvollen Fotografien EE Heiko Klüh für seine stimmigen Soundsamples EE Jack Doyle für die gute Arbeit und die gute Dokumentation an seiner Tween-Engine EE 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,

24 | Vorwort 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!

Vorwort | 25 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 Nick Weschkalnies Programmierung« 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

26 | Vorwort 1 Was ist Flash? KAPITEL 1

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­ Flash-Versionen Wave aus San Diego von gekauft. Kurze Zeit später Die Produktbezeichnung der entwickelte sich aus dem Zusammenschluss beider Unternehmen verschiedenen Flash-Versionen und der Weiterentwicklung der Software »Future Splash Anima- ist auf den ersten Blick nicht tor« von FutureWave die erste Flash-Version. Zunächst wurde eindeutig und führt gelegentlich Flash ausschließlich für animierte Vektorgrafiken eingesetzt – zu Missverständnissen. Die fol- seitdem hat es sich jedoch stetig, und nicht zuletzt durch die gende Aufstellung klärt vermeid- Übernahme von Macromedia seitens Adobe im Jahr 2005, wei- liche Verwechslungen auf: EE Flash MX  Flash 6 terentwickelt. EE Flash MX 2004  Flash 7 Flash avancierte bis heute zu einem vollständigen Multimedia- EE Flash 8  Flash 8 Autorensystem für Online- und Offline-Produktionen. Im Mai EE Flash CS3  Flash 9 2010 ist die elfte Version, Flash CS5, der beliebten Multimedia- EE Flash CS4  Flash 10 Autorensoftware erschienen. EE Flash CS5  Flash 11

1.2 Entwicklungsumgebung, Player und Projektor

Mit Adobe Flash (kurz: Flash) wird die Entwicklungsumgebung Flash Player Browser-Plugin zur Erstellung und Entwicklung multimedialer Inhalte, sogenann- Das aktuelle Browser-Plugin für ter »Flash-Filme« bezeichnet. Die in der Entwicklungsumgebung Ihren Browser können Sie unter der folgenden Adresse kostenlos erstellten Dateien, auch als Quelldateien bezeichnet, haben die herunterladen: Dateierweiterung .fla. Quelldateien werden nur vom Flash- http://get.adobe.com/de/­ Anwender selbst benötigt, um das Projekt zu entwickeln oder zu flashplayer/ erweitern.

1.2 Entwicklungsumgebung, Player und Projektor | 29 »Shockwave Flash« oder »Small Die aus den Quelldateien resultierenden Ergebnisse werden Web Format« aus der Entwicklungsumgebung mittels eines Compilers erstellt. Auch heute noch wird diskutiert, Die sogenannten SWF-Dateien mit gleichnamiger Dateiendung welche Bedeutung die richtige ist. werden auch als Flash-Filme bezeichnet. SWF steht entweder Nach der ursprünglichen techni- schen Herkunft scheint »Shock- für »Small Web Format« oder für »Shockwave Flash«. Welche wave Flash« richtig zu sein. Hin- Bezeichnung die richtige ist, lässt sich nicht mehr eindeutig fest- weise darauf fi nden sich auch stellen. heute noch in Verankerungen des Um Flash-Filme betrachten zu können, ist der sogenannte Formats in Betriebssystemen und Flash Player erforderlich, der sowohl als »Standalone« als auch in JavaScript-Dateien von Adobe zur Einbettung eines Flash-Films als Webbrowser-Plugin verfügbar ist und es ermöglicht, Flash in HTML. Gängiger erscheint je- im Webbrowser zu betrachten. Auch den Flash Player gibt es in doch der Begriff »Small Web For- verschiedenen Versionen. Zum Zeitpunkt der Drucklegung des mat«, weil die Begriffserklärung Buches ist der Flash Player 10.1 aktuell. Aus der Entwicklungsum- sich an der tatsächlichen Anwen- gebung können zusätzlich sogenannte Projektoren erstellt wer- dung orientiert. Auch Adobe den. Projektoren haben in Windows die Dateierweiterung .exe scheint diese Begriffserklärung in- zwischen zu bevorzugen. und auf Macs die Dateierweiterung .app. Projektoren sind direkt ausführbar – der Flash Player ist integriert, sodass Projektoren autonom lauffähig sind.

GE Abbildung 1.1 Ein Flash-Film im Firefox-Browser

30 | 1 Was ist Flash? FE Abbildung 1.2 Ein Flash-Film im (Stand-Alone-) Flash Player

Um Flash-Filme im Webbrowser zu betrachten, werden diese auf Hinweis einen Webserver geladen. Sie können dann z. B. mittels HTML Die Dateiendung .app wird auf und JavaScript eingebettet werden und im Webbrowser abge- dem Mac nicht angezeigt. spielt werden.

1.3 Vektoren und Pixel

Flash lässt sich als eine Kombination aus einem Programm zur Flash arbeitet vektorbasiert. Erstellung von Vektorgrafi ken und einer Animationssoftware Obwohl Flash selbst auch Pixel- bezeichnen. Über Flash lassen sich verschiedene Inhalte wie Bit- grafi ken und im zunehmenden maps, Texte, Sounds und Videos zusammenführen und parallel Maße Techniken zur Manipula- im Flash Player darstellen bzw. ausgeben. tion von Pixeln bietet, arbeitet Flash vektorbasiert und ist in Vektorgrafi k | Eine Vektorgrafi k ist eine Computergrafi k, zu erster Linie ein Programm zur deren Darstellung mathematische Größen verwendet werden. Erstellung von Vektorgrafi ken und -animationen. 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.

1.3 Vektoren und Pixel | 31 [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.

GE Abbildung 1.3 Oben: Pixelgrafi k, unten: Vektorgrafi k

1.4 Anwendungsbereiche

Flash wird mittlerweile in sehr vielen Bereichen genutzt – die Zeit Dateigröße von langatmigen Flash-Intros ist bereits lange vorbei. Nachfol- Da geometrische Formen wie gend werden exemplarisch einige Anwendungsbereiche gezeigt. 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.4EE Flash-Animation von HybridWorks

32 | 1 Was ist Flash? Animationen | Animationen werden sowohl für Werbeeinblen- Animationsbeispiel dungen, animierte Comics, Spiele, Präsentationen als auch in http://www.hybridworks.jp/icorn/ vielen anderen Anwendungsbereichen unterstützend eingesetzt. top.shtml 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- Flash Lite und Adobe AIR oberfl ächen sowohl für das Web als auch für CD- und DVD-Pro- Mehr zu Flash Lite und zu Adobe duktionen verwendet. Mittels Flash Lite und dem Flash Player in AIR erfahren Sie in Kapitel 21, »Ein Blick über den Tellerrand«. 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.5 Flash-basierter RSS-Reader von my.gritwire.com

1.4 Anwendungsbereiche | 33 Bildschirmschoner Präsentationen | Die vielfältigen Möglichkeiten, verschiedene Flash kann auch zur Erstellung Medien in Flash parallel einzusetzen, bieten die idealen Voraus- von Bildschirmschonern verwen- setzungen für Produktpräsentationen, sowohl für Online-Präsen- det werden. Dazu sind jedoch er- tationen im Web als auch für Offl ine-Produktionen (CD, DVD, gänzende Tools notwendig. Mehr dazu erfahren Sie in Kapitel 21, USB etc.). »Ein Blick über den Tellerrand«.

Abbildung 1.6EE Produktpräsentation von Mercedes-Benz Deutschland (http://www.mercedes-benz.de)

Spiele | Online- und Offl ine-Spiele werden aufgrund der Leis- Multiplayer-Spiele tungssteigerung immer häufi ger mit Flash entwickelt. Dabei las- In Kombination mit Server- sen sich Animationen und Interaktivität in Flash kombinieren, um technologien lassen sich auch Multiuser-Spiele umsetzen. 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. und Cinema 4D.

Abbildung 1.7EE Boom Bang – Denk- und Logik- Online-Flash-Spiel

34 | 1 Was ist Flash? Rich Internet Applications | Als Rich Internet Applications Webseiten (RIA) werden Anwendungen bezeichnet, die Internettechniken Eine gute Quelle zur Inspiration verwenden, um mit interaktiven Benutzeroberfl ächen auf ent- sind Portale oder Flash-Awards, fernte Daten zuzugreifen. Dazu gehören Kalenderanwendungen, die in unterschiedlichen Abstän- Schulungs- und Prüfungsanwendungen, Shop-Systeme, Preissu- den verschiedene Flash-Websei- che, Kartensuche etc. RIAs lassen sich fl ashbasiert sowohl für den ten prämieren. Lassen Sie sich Browser als auch als Desktop-Anwendung mittels Adobe AIR ent- inspirieren, z. B. unter: wickeln. Für die Erstellung von RIAs wird alternativ zu Flash auch http://www.thefwa.com/ 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.8 Flickr: 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-

1.4 Anwendungsbereiche | 35 wickeln können. Auch das Thema Lizenzkosten spielt dabei eine HTML 5 – eine Alternative zu Flash? Rolle, da der Einsatz professioneller Programme wie z. B. Flash CS5 im Gegensatz zu HTML5 natürlich Geld kostet. Da sich bislang noch kein Codec etabliert hat, wird HTML 5 Flash Aktuell gibt es drei verschiedene Video-Codecs, die versuchen, in absehbarer Zeit wohl nicht das Internet zu erobern: H.264, Ogg/Theora und von Google ersetzen. 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.

Simulationen E-Learning | Für E-Learning-Module ist Flash ebenso geeignet, Mittels Vektoranimationen können da verschiedene Medien wie Audio (Sprachausgabe), Video (Lern- schnell ladende Simulationen ge- videos), Bitmaps und Vektoren (erläuternde Bilder, Diagramme) zeigt werden – mittels Action- und Text miteinander verknüpft werden können. Über Action- Script sogar dynamische Simula­ tionen und Ausgaben (z. B. Script lassen sich dann gegebenenfalls Test- und Prüfungseinhei- animierte Chartdiagramme). Simu- ten sowie eine serverseitige Verarbeitung realisieren. lationen werden häufig für E-Lear- ning-Produktionen entwickelt.

36 | 1 Was ist Flash? FE Abbildung 1.9 Flash-Video-Player von youtube.com

1.5 Neues in Flash CS5

Die Neuerungen der Vorgängerversion Flash CS4 richteten sich Layout verändern schwerpunktmäßig an design- und grafi korientierte Benutzer. In Wie gewohnt lässt sich das Layout der neuen Version Flash CS5 hat Adobe sowohl viele Neuerungen beliebig verändern. Flash spei- chert die vorgenommenen Ände- für Programmierer als auch für Designer eingeführt. Die wichtigs- rungen am Layout standardmäßig ten Neuerungen werden im Folgenden kurz vorgestellt. ab, sodass Änderungen auch bei einem Neustart erhalten bleiben. Benutzeroberfl äche | Standardmäßig befi ndet sich dieZeitleiste 1 in der Arbeitsumgebung unten, rechts befi ndet sich die Werk- HE Abbildung 1.10 zeugleiste 3. Nach der Installation ist beim ersten Öffnen von Die neue Oberfl äche von Flash die Ansicht auf Basis 2 voreingestellt. Flash CS5 b

3

a

1.5 Neues in Flash CS5 | 37 1 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 b Versionen von . 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.

GE Abbildung 1.11 Inverse Kinematik – »Feder « | Eine sehr bemerkenswerte Neu- Numerische Eigenschaftswerte lassen sich mit der Maus ändern. 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 Bones nochmals verbessert. Neu hinzugekommen ist die Option Feder, Mit Bones (engl. für »Knochen«) die das natürliche Animieren nun noch realistischer aussehen lassen sich Bereiche einer Form lässt. Mit der Eigenschaft Feder oder besser gesagt der Sprungfe- oder MovieClips miteinander der, kann ab sofort die Federhärte eingestellt werden. verketten. Eine solche Ver- Um die Eigenschaft Feder zu aktivieren, wählen Sie zunächst kettung wird auch als Skelett die einzelnen Bones des IK-Skeletts mit dem Auswahlwerkzeug bezeichnet. Bones werden in aus und ändern die Werte Stärke und Dämpfung im Eigenschaf- einem Skelett in einer Hierarchie aus über- und untergeordneten ten-Fenster im Reiter Feder 1. Damit diese Einstellungen wirk- Elementen miteinander verbun- sam werden, müssen Sie darauf achten, dass für das IK-Skelett den. Mehr zur inversen Kine- die Option Aktivieren 2 im Eigenschaften-Fenster im Reiter matik fi nden Sie in Kapitel 5, Federn ausgewählt ist. Mehr zum Thema Feder fi nden Sie in »Animation«. Unterabschnitt »Federn aktivieren« in Abschnitt 5.10, »Inverse Kine matik«.

a

2

GE Abbildung 1.12 GE Abbildung 1.13 Federeigenschaften Die 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

38 | 1 Was ist Flash? 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. b a

GE Abbildung 1.14 GE Abbildung 1.15 Zweispaltiges Textfeld Verbindung 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 HE Abbildung 1.16 die Codevorschläge 2 werden von Flash automatisch angezeigt. Anzeige von Codehinweisen

a b

1.5 Neues in Flash CS5 | 39 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. a Deko-Werkzeuge | Eine weitere interessante Neuerung fi n- det sich im Deko-Werkzeug 1, das uns beim Zeichnen z. B. GE Abbildung eine Reihe von Baumtypen zur Auswahl anbietet, die beliebig Deko-Werkzeug-Icon zum Erstel- len von dekorativen Grafi kele- auf der Bühne positioniert werden können. Je länger die Maus- menten 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.19 Feueranimation mit dem Deko- Werkzeug

GE Abbildung 1.18 Eine 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-

40 | 1 Was ist Flash? 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«.

FE Abbildung 1.20 Datei und Ordnerstruktur im XFL-Format

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 GE Abbildung 1.21 Graphics) gespeichert werden. Verbessertes Zusammenspiel von Flash und der restlichen Creative Suite 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.

a

FE Abbildung 1.22 Farbauswahl für Video-Skins bei der Video-Einbindung

1.5 Neues in Flash CS5 | 41 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. GE Abbildung 1.23 Direktes Abspielen von Videos in Neue Template-Vorlagen | Eine ganze Reihe neuer Projektvor- der »Flash-Arbeitsumgebung« 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.

a

GE Abbildung 1.25 b Verschiedene Animations- und ActionScript-Vorlagenbeispiele

GE Abbildung 1.24 Willkommensbildschirm von Flash für die Vorlagenauswahl iPhone-Apps Inhalte für das iPhone | Groß angekündigt wurde von Adobe Da die Entwicklung von iPhone- die neue Möglichkeit, mit Flash CS5 Code zu schreiben, der für Apps mit Flash CS5 von Adobe die Erstellung von iPhone-Apps genutzt werden kann. nicht weiter vorangetrieben wird, Da allerdings Apple sehr kurzfristig vor der Markteinführung werden wir in diesem Buch auch nicht mehr speziell auf dieses von Flash CS5 die Richtlinien für das iPhone SDK 4 geändert Thema eingehen. Adobe selbst rät hat, ist es nun seitens Apple untersagt, »fremden« Code in eine davon ab, mit Flash CS5 Apps für iPhone-App zu konvertieren. Es besteht daher ein großes Risiko das iPhone zu entwickeln. 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

42 | 1 Was ist Flash? 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 GE Abbildung 1.26 zugreifen können. Das Fenster Codefragmente 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/ a EE SWF-Verlauf : Eine sehr interessante Neuerung in Flash CS5 ist die Protokollierung der SWF-Dateigröße. Diese hält bei b jedem Erstellen einer neuen SWF-Datei die Größe 1 und das Erstellungsdatum inklusive Uhrzeit 2 während der Testphase c

fest. Damit kann gut der Verlauf des Projekts in Bezug auf die GE Abbildung 1.27 Größe beobachtet werden. Sollte sich zwischen zwei Testpha- SWF-Verlauf mit Hinweis auf eine sen die Dateigröße mehr als verdoppeln, wird von Flash ein Verdopplung der Dateigröße Hinweis 3 gegeben.

1.5 Neues in Flash CS5 | 43 EE Hilfe-Funktion: Standardmäßig führt die Hilfe, die Sie über Tipp: Online-Hilfe deaktivieren (F1) erreichen können, zur Online-Hilfe von Adobe. Adobe Wenn Sie über keine Internet- kann die Hilfeinhalte so leichter aktualisieren. Zusätzlich ste- verbindung verfügen oder die Online-Hilfe nicht nutzen möch- hen Ihnen auf den Online-Seiten der Hilfe auch Benutzerkom- ten, können Sie diese über das mentare zur Verfügung. Fenster Fenster • Erweiterun- EE Integration mit : Adobe Flash Builder gen • Verbindungen im Menü 4 war bisher unter dem Namen Adobe Flex Builder bekannt. durch Aktivierung der Option Seit der Version Flash CS5 besteht nun eine direkte Anbindung Offline-Optionen deaktivieren. an das Programm. Dies sorgt für eine höhere Effizienz bei der Daraufhin öffnet sich via (F1) dann wie gewohnt eine Offline- Entwicklung Ihrer Projekte. Mit Hilfe dieses Tools lassen sich Hilfe. 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.

44 | 1 Was ist Flash? 20 Spieleprogrammierung KAPITEL 20

Der Browser-Spielemarkt wächst weiterhin von Jahr zu Jahr. Spieleprogrammierung Dabei werden immer mehr Spiele auf Flash basierend erstellt. Ein erfahrener Projektmanager aus Sowohl Computerspiel- als auch Konsolenspiel-Klassiker wie z. B. der Computerspielbranche sagte einst sinngemäß den klugen Satz: Donkey Kong, Snake, Katakis, Pong, Turrican, Tetris oder digitale »Es gibt Anwendungsentwickler, Adaptionen von Brett- und Kartenspielen wie Schach, Skat, Poker und es gibt Spieleentwickler.« Auf oder Aufbauspiele wie beispielsweise Farmville (Social-Network- dem Markt gibt es tatsächlich nur Spiele, Facebook-Spiel) sowie technisch anspruchsvollere Spiele wenige Entwickler, die sich pro- wie 3D-Rennspiele und 3D-Ego-Shooter werden inzwischen auf fessionell mit beiden Bereichen beschäftigen. Das liegt vermutlich Flash basierend entwickelt. daran, dass sowohl die inhaltliche, Je nach Spielprinzip werden dabei teilweise sehr viele unter- strategische als auch die techni- schiedliche Techniken eingesetzt. Im Verlauf dieses Kapitels sche Herangehensweise bei der werden zunächst einige grundlegende Techniken und klassische Spieleentwicklung und der An- Spielbestandteile erläutert. wendungsentwicklung sehr unter- Abschließend finden Sie am Ende des Kapitels ein Beispiel und schiedlich ausfallen. Erläuterungen dazu, wie Sie ein Spiel mit Flash entwickeln kön- nen. Das Spiel ist bewusst einfach gehalten. Hinweis Viele der nachfolgenden Elemente 20.1 Interaktion lassen sich auch in anderen An- wendungsbereichen einsetzen.

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- Tastaturbefehle deaktivieren schiedlich ausfällt, werden im Folgenden ausschließlich die Um auf Keyboard-Ereignisse in Grundlagen dazu erläutert. einem Flash-Film reagieren zu können, der über die Entwick- lungsumgebung getestet wird 20.1.1 Tastatursteuerung (Steuerung • Film testen), sollten Zur Steuerung über die Tastatur können Sie sogenannte Key- Sie die Option Steuerelement • board-Ereignisse nutzen. Das Ereignis KeyboardEvent.KEY_DOWN Tastaturbefehle deaktivieren im wird aufgerufen, wenn eine Taste gedrückt wurde. Das Ereignis Flash Player aktivieren (am Mac finden Sie die Option unter Steu- KeyboardEvent.KEY_UP wird aufgerufen, wenn eine Taste wieder erung • Film testen • Steuerung losgelassen wurde. Um auf ein Ereignis reagieren zu können, kön- • Tastaturbefehle deaktivieren). nen Sie einen Ereignis-Listener an einem Objekt registrieren, das Anderenfalls werden einige Tasta- die Klasse InteractiveObject erweitert. In vielen Fällen wird tureingaben nicht registriert.

20.1 Interaktion | 785 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); GE Abbildung 20.1 Der Menüpunkt Tastaturbefehle function keyDownHandler(e:KeyboardEvent):void { deaktivieren trace(e.keyCode + " gedrückt"); } function keyUpHandler(e:KeyboardEvent):void { trace(e.keyCode + " losgelassen"); }

Über die Eigenschaft keyCode des an die Ereignisprozedur über- Key-Codes gebenen KeyboardEvent-Objekts können Sie feststellen, welche Die wichtigsten Key-Codes Taste gedrückt wurde. Wenn Sie beispielsweise auf das Drücken fi nden Sie im Anhang dieses Buches. 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):

786 | 20 Spieleprogrammierung stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);

20.1.2 Maussteuerung Viele 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 Mausrad verwenden bestimmten Objekten wie z. B. einem MovieClip registrieren. Über das Ereignis MouseEvent. Wenn Sie Mausereignisse am Stage-Objekt registrieren, können MOUSE_WHEEL können Sie auf die Bewegung des Mausrads reagie- Sie z. B. feststellen, ob der Benutzer die Maustaste an einer beliebi- ren (am Mac wird dies nicht un- gen Stelle des Flash-Films gedrückt hat. Registrieren Sie ein Mau- terstützt). Dazu folgendes Bei- sereignis hingegen an einem Objekt wie z. B. einem MovieClip, spiel: wird das Ereignis nur ausgelöst, wenn sich der Mauszeiger über stage.addEventListener dem Objekt befindet. Angenommen, Sie möchten feststellen, ob (MouseEvent.MOUSE_WHEEL, der Benutzer die Maustaste an einer beliebigen Stelle innerhalb mouseWheelHandler); function mouseWheelHandler des Bereichs des Flash-Films gedrückt hat. Dazu können Sie das (e:MouseEvent):void { Ereignis MouseEvent.MOUSE_DOWN wie folgt verwenden: trace(e.delta + " Zeilen gescrollt."); stage.addEventListener(MouseEvent.MOUSE_DOWN, } mouseDownHandler); function mouseDownHandler(e:MouseEvent):void { trace("Maustaste gedrückt."); }

Um festzustellen, ob die Maustaste über einem bestimmten Mausrad am Mac Objekt gedrückt wurde, können Sie das Ereignis wie folgt nut- In Anhang A, »FAQ«, finden Sie zen: einen Workaround, wie Sie Maus- radbewegungen auch am Mac ab- fragen können. 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

20.1 Interaktion | 787 Maus außerhalb der Bühne und stopDrag in Kombination mit den Mausereignissen MOUSE_ Über das Ereignis Event.MOUSE_ DOWN und MOUSE_UP wie folgt verwenden: LEAVE können Sie feststellen, ob der Mauszeiger aus dem Bereich mc.addEventListener(MouseEvent.MOUSE_DOWN, der Bühne des Flash-Films heraus- bewegt wurde (nur im Browser). mouseDownHandler); Beispiel: mc.addEventListener(MouseEvent.MOUSE_UP, stage.addEventListener mouseUpHandler); (Event.MOUSE_LEAVE, function mouseDownHandler(e:MouseEvent):void { mouseLeaveHandler); e.currentTarget.startDrag(); function mouseLeaveHandler } (e:Event):void { trace("Mauszeiger hat die function mouseUpHandler(e:MouseEvent):void { Bühne verlassen."); 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, Wird ausgelöst, wenn der clickHandler); Benutzer die Maustaste function clickHandler(e:MouseEvent):void { über einem Objekt drückt. trace(e.currentTarget.name+" angeklickt."); }

MouseEvent.DOUBLE_CLICK mc.doubleClickEnabled = true; Wird ausgelöst, wenn der mc.addEventListener(MouseEvent.DOUBLE_CLICK, Benutzer einen Doppelklick doubleclickHandler); über einem Objekt ausführt. function doubleclickHandler(e:MouseEvent): Die Eigenschaft double­ void { ClickEnabled des Objekts trace(e.currentTarget.name+" per Doppel- muss auf true gesetzt sein. klick angeklickt."); }

MouseEvent.MOUSE_DOWN stage.addEventListener(MouseEvent.MOUSE_DOWN, Die linke Maustaste wurde mouseDownHandler); über einem Objekt (im Bei- function mouseDownHandler(e:MouseEvent):void { spiel der Bühne) gedrückt. trace("Die Maustaste wurde gedrückt."); }

MouseEvent.MOUSE_UP stage.addEventListener(MouseEvent.MOUSE_UP, Die linke Maustaste wurde mouseUpHandler); über einem Objekt (im function mouseUpHandler(e:MouseEvent):void { ­Beispiel der Bühne) losge- trace("Die Maustaste wurde losgelassen."); lassen. }

G Tabelle 20.1 Ereignisse für die Maussteuerung

788 | 20 Spieleprogrammierung Ereignis Beispiel Beschreibung

MouseEvent.MOUSE_MOVE stage.addEventListener(MouseEvent.MOUSE_MOVE, Der Mauszeiger wurde mouseMoveHandler); bewegt. function mouseMoveHandler(e:MouseEvent):void { mc.x = mouseX; mc.y = mouseY; e.updateAfterEvent(); }

MouseEvent.MOUSE_WHEEL stage.addEventListener(MouseEvent.MOUSE_WHEEL, Wird ausgelöst, wenn das mouseWheelHandler); Mausrad der Maus benutzt function mouseWheelHandler(e:MouseEvent):void { wurde. (Auf Macs funktio- mc.y += e.delta*-1; niert das so direkt nicht.) }

MouseEvent.ROLL_OVER mc.addEventListener(MouseEvent.ROLL_OVER, Wird ausgelöst, wenn der rollOverHandler); Mauszeiger über ein Objekt function rollOverHandler(e:MouseEvent):void { bewegt wird. trace("RollOver: "+e.currentTarget.name); }

MouseEvent.ROLL_OUT mc.addEventListener(MouseEvent.ROLL_OUT, Wird ausgelöst, wenn der rollOutHandler); Mauszeiger aus einem Ob- function rollOutHandler(e:MouseEvent):void { jekt heraus bewegt wird. trace("RollOut: "+e.currentTarget.name); }

G Tabelle 20.1 Ereignisse für die Maussteuerung (Forts.)

20.2 Kollisionserkennung

Ein Hauptbestandteil von vielen Spielen ist die sogenannte Kol- Kollisionserkennung lisionserkennung. Eine präzise Kollisionserkennung ist häufig Sinn und Zweck einer Kollisions- ein entscheidender Erfolgsfaktor für ein gutes Spiel. Es gibt ver- erkennung ist es, zu überprüfen, ob ein grafisches Objekt ein oder schiedene Techniken, um Kollisionserkennungen durchzuführen. mehrere andere grafische Objekte Einige dieser Techniken werden im Folgenden erläutert. berührt oder durchdringt.

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.

20.2 Kollisionserkennung | 789 Kollisionserkennung von Begrenzungsrahmen | Sie können Begrenzungsrahmen über die Methode hitTestObject überprüfen, ob sich Begren- Der Begrenzungsrahmen eines zungsrahmen von Anzeigeobjekten überschneiden. Bei rechtecki- MovieClips kann sich von der 1 eigentlichen Form des MovieC- gen Formen funktioniert das einwandfrei . Sobald jedoch eine lip-Inhalts unterscheiden. Wenn der Formen nicht rechteckig ist, schlägt die Kollisionserkennung Sie einen MovieClip in der Ent- fehl bzw. ist je nach Form mehr oder weniger genau 2. Eine wicklungsumgebung auswählen, Kollision findet bereits dann statt, wenn sich die Begrenzungsrah- wird der Begrenzungsrahmen men überschneiden. Da sich aber die Form des Begrenzungsrah- durch einen hellblauen Auswahl- mens und die tatsächliche Form des Objekts unterscheiden, führt rahmen angezeigt. das meist zu keinem akzeptablen Ergebnis. b

a

G Abbildung 20.2 Links: 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:

20_Spieleprogrammierung\ mc0.addEventListener(Event.ENTER_FRAME,enterFrameHandler); Kollision_hitTestObject\beispiel.fla 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.

790 | 20 Spieleprogrammierung 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); 20_Spieleprogrammierung\ function enterFrameHandler(e:Event):void { Kollision_hitTestPoint\­ var xPos:Number = stage.stageWidth/2; beispiel_01.fla 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ühne EE y-Koordinate des Punktes auf der Bühne EE 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); 20_Spieleprogrammierung\ function enterFrameHandler(e:Event):void { Kollision_hitTestObject\­ var xPos:Number = stage.stageWidth/2; beispiel_02.fla 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.2 Kollisionserkennung | 791 20.2.2 Pixelbasierte Kollisionserkennung Neben 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 BitmapData Anmerkung Angenommen, Sie haben auf der Bühne eines Flash-Films zwei Da es sich um eine pixelbasierte MovieClips erstellt. Der erste MovieClip »myCircle« besitzt eine Kollisionserkennung handelt, kön- Kreisform. Der zweite MovieClip »myStar« besitzt eine Stern- nen die beiden MovieClips des form. Auf Basis der Inhalte der MovieClips können Sie wie folgt Beispiels natürlich auch andere beliebige Vektorformen bein­ entsprechende BitmapData-Objekte erzeugen: halten. 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);

Registrierungspunkte der In Zeile 2 wird der Begrenzungsrahmen des MovieClips »my­Circle« MovieClips über die Methode getBounds ermittelt und der Variablen Die Registrierungspunkte der bei- circle­Rect zugewiesen. In Zeile 3 wird ein neues BitmapData- den MovieClips in diesem Beispiel Objekt erzeugt. Die Breite und die Höhe des BitmapData-Objekts müssen links oben sein. werden auf Basis der Breite und der Höhe des zuvor definierten

792 | 20 Spieleprogrammierung 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 getBounds Pixel des MovieClips »myCircle« in die BitmapData übernommen Die Methode getBounds gibt den (nachgezeichnet). Es wird also eine visuelle Kopie des Inhalts Begrenzungsrahmenbereich des angegebenen Anzeigeobjekts zu- des MovieClips »myCircle« in der BitmapData gespeichert. In rück. Der zurückgegebene Wert Zeile 6 bis 8 wird analog dazu die Sternform in eine BitmapData bezieht sich auf das Koordinaten- starBmpData übertragen. system, das als Argument (in die- sem Beispiel: this) an die Me- Kollisionserkennung mit hitTest | Die Methode hitTest der thode übergeben wird. 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;

20.2 Kollisionserkennung | 793 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: }

Abbildung 20.3EE Die beiden Anzeigeobjekte kollidieren.

20_Spieleprogrammierung\ Zunächst wird an der Bühne in Zeile 1 ein ENTER_FRAME-Ereignis- Kollision_hitTest\Kollision_ Listener registriert. Der »Stern«-MovieClip wird auf die Koordi- hitTest.fl­a 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 Verzeichnis20_Spieleentwicklung\Kol- lision_hitTest\Kollision_hitTest.fl­a.

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;

794 | 20 Spieleprogrammierung FE Abbildung 20.4 Die Kollisionserkennung funktio- niert nicht richtig mit transfor- mierten Objekten.

Damit die Kollisionserkennung auch mit Objekten funktioniert, BitmapData.dispose die zur Laufzeit transformiert wurden bzw. werden, müssen Die Methode dispose der Bit- einige Änderungen am Code vorgenommen werden. Die wesent- mapData-Klasse sorgt dafür, dass der von der BitmapData verwen- liche Änderung ist, dass hier eine Transformationsmatrix für beide dete Speicher freigegeben wird. Anzeigeobjekte defi niert wird und diese dann bei der Generie- Die Breite und Höhe der Bitmap- rung der jeweiligen BitmapData an die Methode draw überge- Data werden dabei auf »0« zu- ben wird. Das bewirkt, dass Transformationen in die BitmapData rückgesetzt. In dem gezeigten übernommen und dort berücksichtigt werden. Beispiel wird die Methode ange- wendet, nachdem die Kollisions- Damit Transformationen zur Laufzeit berücksichtigt werden erkennung durchgeführt wurde. können, muss im Gegensatz zum vorangegangenen Beispiel die Da die BitmapData-Objekte bei jeweilige BitmapData der Anzeigeobjekte wiederholt zur Lauf- jedem Durchlauf neu initialisiert zeit generiert werden. Der folgende Code zeigt die Anwendung werden, ist es sinnvoll, den (wichtige Codestellen sind fett gesetzt): Speicher dann auch wieder frei- zugeben.

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;

20.2 Kollisionserkennung | 795 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: }

Abbildung 20.5EE Jetzt funktioniert die Kollisionser- kennung auch mit transformierten Objekten.

20_Spieleprogrammierung\ Das Beispiel fi nden Sie auf der DVD im Verzeichnis 20_Spiele- Kollision_hitTest_transformed\ entwicklung\Kollision_hitTest_transformed\Kollision_hitTest_trans- Kollision_hitTest_transformed.fl­a formed.fl­a.

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.

796 | 20 Spieleprogrammierung 1

F Abbildung 20.6 Registrierung des MovieClips

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. }

links: mc.x mc.x b c

0 0

rechts:

mc.x+mc.width mc.x+mc.width d

e F Abbildung 20.7 Kollisionserkennung mit linkem stage.stageWidth stage.stageWidth und rechtem Randbereich

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. }

20.2 Kollisionserkennung | 797 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. }

oben: 0 mc.y 0 mc.y

unten:

mc.y+mc.height Abbildung 20.8 E Kollision mit oberem und mc.y+mc.height unterem Randbereich stage.stageHeight 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. b 3 d

3px

Abbildung 20.9 E a vx = 5; vx = 5*-1; Das Bouncing-Prinzip mc.x+=vx; mc.x+=vx;

798 | 20 Spieleprogrammierung Schritt für Schritt: Kollisionserkennung mit Randbereichen und Bouncing Der 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_ 20_Spieleprogrammierung\ Randbereiche\KollisionRandbereiche_01.fla. Kollision_Randbereiche\Kollision- Randbereiche_01.fla 2 Kollisionserkennung und Bouncing Weisen 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.xrechts) { vx*=-1; } if (e.currentTarget.yunten) { vy*=-1; } }

Sobald der MovieClip einen Randbereich überschreitet, wird die Ergebnis der Übung: Bewegungsrichtung durch Multiplikation mit –1 umgekehrt. 20_Spieleprogrammierung\­ Kollision_Randbereiche\Kollision- Randbereiche_02.fla 3 Film testen Testen 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.3 Zeit | 799 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_ Alternative FRAME der Bühne (Stage-Objekt) die abgelaufene Zeit wie folgt Anstatt eines Event.ENTER_ ermitteln; die Differenz der beiden Zeitwerte entspricht dann der FRAME-Ereignisses, das sich nach abgelaufenen Zeit: der Bildrate eines Flash-Films richtet, können Sie auch ein Ti- mer-Objekt verwenden, um die var time0:Number=getTimer(); abgelaufene Zeit zu ermitteln. stage.addEventListener(Event.ENTER_FRAME,getTime); Dazu folgendes Beispiel: function getTime(e:Event):void { var time0:Number=getTimer(); var time1:Number=getTimer(); var myTimer:Timer = new var zeit:Number=time1-time0; Timer(100,int.MAX_VALUE); trace(zeit); myTimer.addEventListener } (TimerEvent.TIMER,getTime); myTimer.start(); function getTime(e:Event): Um die Zeit abgerundet in Sekunden anzuzeigen, müssen Sie die void { Zeit durch 1.000 dividieren und über Math.floor runden: var time1:Number=getTimer(); var zeit:Number = Math. var zeit:Number = Math.floor((time1-time0)/1000); floor((time1-time0)/1000); trace(zeit); } 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); } }

800 | 20 Spieleprogrammierung 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, Weitere Anwendungsbereiche ein Spielername eingeben. Damit der Spielername und gegebe- SharedObjects werden häufi g nenfalls weitere Daten nicht bei jedem Neustart neu eingegeben auch zum Speichern von Daten für Offl ine-Anwendungen (CD, werden müssen, lassen sich Daten über ein SharedObject lokal DVD, USB etc.) genutzt. Ein auf dem Client-Rechner speichern. Ein SharedObject funktioniert SharedObject lässt sich beispiels- ähnlich wie ein Browser-Cookie . weise auch dazu verwenden, ei- nen Highscore lokal auf einem Größe des lokalen Speichers | Sie sollten jedoch beachten, System, z. B. bei einem Spiel für CD/DVD, zu speichern. Ein Share- dass der Flash Player die Datenmenge standardmäßig auf 100 KB dObject lässt sich natürlich nicht begrenzt. Der Benutzer kann die Limitierung des verfügbaren nur für Spiele nutzen. Sie können Speichers selbst erhöhen, reduzieren oder die Nutzung von loka- beliebige Daten, z. B. Daten eines lem Speicher vollständig unterbinden. Adressbuchs, lokal speichern. 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 Weitere Einstellungsmöglich- Speichermenge zur Speicherung der Daten durch Verschieben keiten des Reglers 2 limitieren In dem Dialogfenster Einstel- als auch die Speicherung lungen für durch Aktivierung des können Sie zusätzlich einstellen, Optionsfelds Nie 3 gänz- ob Sie dem Flash-Film den Zu- lich abschalten. Sollte der griff auf Ihr Mikrofon und Ihre Webcam erlauben oder nicht. Benutzer die Speichermög- lichkeit deaktivieren, funk- tioniert das Speichern von Daten über ein Shared- Object nicht mehr. b c d

FE Abbildung 20.10 GE Abbildung 20.11 Das Kontextmenü Einstellungen für den lokalen Einstellungen Speicher

20.4 Daten lokal speichern mit einem SharedObject | 801 Private Browsing im Flash Player 10.1 Seit dem Flash Player 10.1 wird das Sie müssen also zukünftig verstärkt Private Browsing (engl. für »priva- damit rechnen, dass SharedObjects tes Surfen«) des Browsers berück- gegebenenfalls nicht vorhanden sichtigt. Das hat zur Folge, dass sind. Folgende Browser unterstüt- der Flash Player im Browser, der zen aktuell den privaten Modus: den privaten Modus angeschaltet EE Internet Explorer 8.0 hat, SharedObjects nach Verlassen EE Mozilla Firefox 3.5 des privaten Modus automatisch EE Apple Safari 2.0 verwirft. EE Google Chrome 1.0

SharedObject initialisieren SOL-Dateien Bevor Sie Daten lokal speichern können, müssen Sie zunächst Daten, die lokal über ein Shared- ein SharedObject initialisieren und referenzieren. Dazu dient die Object gespeichert werden, wer- Methode getLocal, die als Argument einen Bezeichner erwartet, den auf der Festplatte in Dateien unter dem die Daten lokal gespeichert werden: mit der Dateiendung .sol abge- legt. SOL-Dateien lassen sich be- quem über spezielle Editoren wie var data_so:SharedObject = SharedObject. z. B. SolVE (http://solve.source- getLocal("data"); forge.net/) für Windows/Mac ein- sehen und editieren. 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, Datenmenge bestimmen müssen Sie anschließend die Methode flush des SharedObjects Über die Eigenschaft size eines aufrufen. Anderenfalls werden die Daten erst auf die Festplatte SharedObjects können Sie die geschrieben, wenn die Verbindung zum lokalen Objekt beendet bereits gespeicherte Daten- menge (in Bytes) bestimmen wird, z. B. wenn der Flash-Film gestoppt wird:

trace(data_so.size); data_so.flush(); Um diese in KB umzurechnen, müssen Sie den Wert durch Über die Methode clear können Sie alle Daten eines SharedOb- 1.024 dividieren: jects auch wieder entfernen: var mySize:Number = data_ so.size/1024; data_so.clear(); trace(mySize);

Lokale Daten lesen | Um Daten eines SharedObjects zu lesen, müssen Sie es zunächst wieder referenzieren:

var data_so:SharedObject = SharedObject. getLocal("data");

802 | 20 Spieleprogrammierung 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 lesen In diesem Workshop wird gezeigt, wie Sie Daten mithilfe eines 20_Spieleprogrammierung\ SharedObjects lokal speichern und auslesen können. SharedObject\SharedObject_01.fla

1 Film öffnen Öffnen Sie den Flash-Film 20_Spieleprogrammierung\SharedOb- ject\SharedObject_01.fla.

2 Daten lokal speichern Weisen 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.4 Daten lokal speichern mit einem ­SharedObject | 803 In einem Eingabetextfeld können Sie einen Spielernamen ein- Spielspaß und Spieltechnik geben, der dann per Mausklick auf den MovieClip »weiter_mc« Wenn Sie vorhaben, selbst ein lokal in einem SharedObject gespeichert wird. Spiel zu entwickeln, nehmen Sie sich die Zeit, vorher darüber 3 nachzudenken, welche Techni- Daten auslesen und ausgeben ken für die Umsetzung erforder- Damit der Spielername automatisch im Eingabetextfeld erscheint, lich sind. Vermeintlich einfache wird er über die Funktion readData, falls vorhanden, ausgele- Spiele wie z. B. ein Tetris-Clone sen. Ergänzen Sie den Code dazu im ersten Schlüsselbild auf der erfordern eventuell komplexere Ebene »Actions« wie folgt: Techniken, als zunächst ange- nommen. Die Komplexität der Technik hat meist nicht viel mit function readData():void { dem resultierenden Spielspaß zu var data_so:SharedObject = SharedObject. tun. Technisch einfache Spiele getLocal("data"); können ebenso viel Spaß ma- if (data_so.data.spielername != undefined) { chen wie Spiele, die komplexe Techniken einsetzen. input_txt.text = data_so.data.spielername; } } readData(); stop();

4 Zurück auf Bild 1 springen Wä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); GE Abbildung 20.12 function goBack(e:MouseEvent):void { Der eingegebene Spielernamen erscheint auch nach einem Neu- gotoAndStop(1); start des Flash-Films, bis Sie ihn } wieder im Eingabetextfeld ändern. stop();

5 Film testen Ergebnis der Übung: Testen Sie den Flash-Film über (Strg)/(°)+(¢). N 20_Spieleprogrammierung\Shared- Object\SharedObject_02.fl­a 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-

804 | 20 Spieleprogrammierung 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 Startbildschirm Zunächst wird der Startbildschirm erstellt, über den der Spieler 20_Spieleprogrammierung\ seinen Spielernamen festlegen kann. Alle grafischen Elemente des Asteroid\Asteroids_01.fla Spiels und die Struktur des Flash-Films wurden bereits an­gelegt. Öffnen Sie den Flash-Film 20_Spieleprogrammierung\Asteroid\ Asteroids_01.fla.

F G Abbildung 20.13 Die Ausgangsbasis

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.5 Asteroids-Spiel | 805 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 initialisieren Soundkomprimierung In der Bibliothek im Ordner Sounds finden Sie verschiedene Die Soundkomprimierung des Sounds, die jeweils mit einer Klasse verknüpft wurden. So wurde Flash-Films wurde in den Veröf- der Sound explosion.wav beispielsweise mit der Klasse Explo- fentlichungseinstellungen des sion verknüpft. Sie können den Sound dann über ein Objekt der Flash-Films auf MP3, 80 kbit/s (Mono) eingestellt. 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 initialisieren Im 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; Mauszeiger ausblenden 4: var punkte:uint=0; Alternativ können Sie an dieser Stelle den Mauszeiger auch aus- Zu Beginn werden einige Spielvariablen initialisiert: blenden. Ergänzen Sie den Code EE dafür um die Zeile: xFighterHealth: Die Lebenspunkte des Raumschiffs; der Wert 1 entspricht vollen Lebenspunkten, bei 0 wird das Spiel Mouse.hide (); beendet.

806 | 20 Spieleprogrammierung 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 Raumschiffsteuerung Auf der Ebene »xFighter« in Bild 10 befindet sich ein Movie­Clip Tastatursteuerung mit einem gleichnamigen Instanznamen. Dieser wird über die Es ist nicht besonders aufwendig, Maus gesteuert. Ergänzen Sie den Code im zehnten Schlüsselbild das Raumschiff auch über die Tas- tatur steuern zu können. Nach- um folgende Zeilen: dem Sie das Spiel fertiggestellt haben, probieren Sie den Code 1: //xFighter-Steuerung selbstständig zu ergänzen. 2: xFighter.addEventListener(Event.ENTER_FRAME, posFighter); 3: function posFighter(e:Event):void { Verzögerung einstellen 4: var dx:Number=stage.mouseX-e.currentTarget.x; Sie können den easeFaktor in 5: var dy:Number=stage.mouseY-e.currentTarget.y; Zeile 6 ändern, um die Verzöge- rung der Bewegung zu ändern. Je 6: var easeFaktor:Number=8; höher Sie den Wert stellen, desto 7: e.currentTarget.x+=dx/easeFaktor; größer wird die Verzögerung. 8: e.currentTarget.y+=dy/easeFaktor; 9: if (stage.mouseY

Ü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- Steuerung des Antriebs Clip mit dem Instanznamen »fireBack«, der den Antrieb des Die Steuerung des Antriebs dient Raumschiffs darstellt. Wenn sich der Mauszeiger oberhalb des ausschließlich zur Visualisierung. Raumschiffs befindet (Zeile 9), sich das Raumschiff also nach oben bewegt, wird der hintere Antrieb des Raumschiffs gezün- Alternativer Antrieb det. Dazu springt der Lesekopf der Zeitleiste des MovieClips Der Antrieb ist sehr einfach »fireBack« dann auf Bild 2 (Zeile 10). Befindet sich der Maus- gestaltet. Sie können auch eine zeiger hingegen unterhalb des Raumschiffs (Zeile 11), wird der Animationssequenz verwenden, Antrieb deaktiviert. Dazu springt der Lesekopf dann wieder auf um das Beispiel visuell etwas aufzuwerten. Bild 1 zurück (Zeile 12).

20.5 Asteroids-Spiel | 807 GE Abbildung 20.14 Die Zustände des Raumschiff antriebs

20.5.5 Feuer frei In 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) { GE Abbildung 20.15 Der MovieClip »GunFire« ist mit 6: var fire:GunFire = new GunFire(); der Klasse GunFire verknüpft. 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;

808 | 20 Spieleprogrammierung 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 MovieClip: Dynamische Klasse genügend Energie besitzt, um einen weiteren Schuss abzugeben Die MovieClip-Klasse ist eine (Zeile 5). Ist das der Fall, wird ein Objekt der Klasse GunFire ini- dynamische Klasse. Objekten der Klasse können zur Laufzeit Eigen- tialisiert (Zeile 6), und das Objekt wird positioniert (Zeile 7 und schaften zugewiesen werden. Von 8). Um den Feldindex des Objekts im Array fireArray und damit diesem Merkmal wird hier ge- das Objekt selbst später eindeutig ermitteln zu können, wird der braucht gemacht, indem der (dynamischen) Eigenschaft myIndex des MovieClips die aktuelle Klasse GunFire die dynamische Länge des Arrays fireArray zugewiesen (Zeile 9). So entspricht Eigenschaft myIndex zur Laufzeit zugewiesen wird. 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).

FE Abbildung 20.16 Der MovieClip »bar«, der inner- halb des MovieClips »gunPower- Display« liegt.

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

20.5 Asteroids-Spiel | 809 Anzahl der Objekte (Zeile 21). Sobald mehr als 20 Objekte der Klasse GunFire exis- überprüfen tieren (Zeile 22), werden die ersten fünf aus dem Array fireAr- Wenn Sie mehrere Instanzen einer ray (Zeile 23) entfernt. Dadurch verhindern Sie, dass die Anzahl Klasse z. B. über eine for-Schleife der Elemente des Arrays immer größer wird und der Speicher mehrmals initialisieren, sollten Sie grundsätzlich zur Laufzeit über- vollläuft. prüfen, ob der Speicherbedarf des Sobald ein Objekt der Klasse GunFire außerhalb der Bühne ist Flash-Films endlos zunimmt. (Zeile 25), wird der Ereignis-Listener unregistriert (Zeile 26) und Denken Sie daran, Objekte, die das Objekt wird aus der Anzeigeliste entfernt (Zeile 27). Anschlie- nicht mehr benötigt werden, für ßend wird die Referenz auf das Objekt aus dem Array fireArray das Löschen aus dem Speicher freizugeben, und prüfen Sie den entfernt (Zeile 28). Speicherverbrauch, bevor Sie ei- nen Flash-Film bereitstellen. 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, GE Abbildung 20.17 createAsteroid); Die Zeitleiste des MovieClips 4: asteroidTimer.start(); »Asteroid« 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 GE Abbildung 20.18 16: if (asteroidArray.length>120) { Explosionssequenz des Asteroiden 17: for (var i:uint = 0; i<10; i++) { 18: asteroidArray[i].removeEventListener (Event.ENTER_FRAME,moveAsteroid); 19: removeChild(asteroidArray[i]);

810 | 20 Spieleprogrammierung 20: } 21: asteroidArray.splice(0,10); 22: } 23: }

Zu Beginn wird die Funktion createAsteroid im Abstand von Alternative: Levels 0,7 Sekunden aufgerufen (Zeile 2 bis 4). Wie Sie später sehen, Es gibt in diesem Spiel keine Le- wird die Zeit nach und nach verringert. In Zeile 5 wird ein Array vels. Diese könnten jedoch ein- initialisiert, dem später Objekte der Klasse Asteroid zugewie- fach eingerichtet werden. Zum sen werden. Die Funktion createAsteroid erzeugt Objekte der Beispiel könnte je Level die Zeit, Klasse Asteroid. Dazu wird in Zeile 7 ein Objekt der Klasse ini- nach der ein Asteroid erzeugt tialisiert. In Zeile 8 und 9 wird das jeweilige Objekt platziert. Auf wird, reduziert werden. 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- Objekte entfernen liger Wert zwischen 5 und 10 zugewiesen. Das Objekt wird zur Sollte die Anzahl der Elemente Anzeigeliste hinzugefügt (Zeile 12), und eine Referenz auf das des Arrays asteroidArray größer als 120 sein (Zeile 16), werden Objekt wird zum Array asteroidArray hinzugefügt (Zeile 13). die ersten zehn Elemente (Zeile In Zeile 14 wird ein Ereignis-Listener an dem Objekt regist- 18 und 19), d. h. die ersten zehn riert, der dafür sorgt, dass die Funktion moveAsteroid mehrmals zuvor erzeugten Asteroiden, ent- pro Sekunde aufgerufen wird. fernt. Dadurch wird verhindert, dass der Speicher vollläuft. Beach- ten Sie, dass die Asteroiden sonst 20.5.7 Bewegung und Kollisionserkennung der Asteroiden weiterhin existent wären, auch Die Formen der Objekte, für die eine Kollisionserkennung durch- wenn Sie die Bühne bereits ver- geführt wird, wurden so gewählt, dass die Kollisionserkennung lassen haben. ü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);

20.5 Asteroids-Spiel | 811 10: e.currentTarget.name="hit"; 11: myExplosion.play(0,1); 12: } 13: // Kollisionserkennung mit GunFire 14: for (var i:uint = 0; i

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. Alternativer Schwierigkeitsgrad Nur wenn beide Bedingungen erfüllt sind, wird der Code ab Den Wert 0,3 können Sie na- Zeile 5 ausgeführt. In Zeile 5 werden die Lebenspunkte des xFigh- türlich auch ändern, um die ters um 0,3 reduziert. Dazu wird die Funktion setHealth aufge- Schwierigkeit des Spiels zu be- rufen, die später noch definiert wird. Sollten die Lebenspunkte einflussen. kleiner oder gleich 0 sein (Zeile 6), wird das Spiel durch den Auf-

812 | 20 Spieleprogrammierung 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 try/catch-Anweisung Laserschüssen des Raumschiffs durchgeführt. Mithilfe einer for- Es kann vorkommen, dass das Schleife (Zeile 14) werden die Elemente des Arrays fireArray fire-Objekt zu diesem Zeitpunkt bereits von der Bühne entfernt durchlaufen. In Zeile 15 wird dann geprüft, ob ein Schuss mit wurde. Aus diesem Grund wird einem Asteroiden kollidiert. In diesem Fall springt der Lesekopf das Entfernen des Objekts in eine des jeweiligen Asteroiden-MovieClips auf Bild 2 (Zeile 16), der try/catch-Anweisung eingeschlos- Instanzname des MovieClips wird auf hit gesetzt, und der Schuss sen. Das dient zur Verhinderung wird sowohl aus dem Array als auch von der Anzeigeliste entfernt von Compiler-Laufzeitfehlern. (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 { Alternative: Dynamische Punkt- xFighterHealth=value; zahl healthBar.bar.scaleX=xFighterHealth; Sie können das Spiel auch so än- } dern, dass sich die Punktzahl mit zunehmender Spieldauer erhöht, Über die Methode setHealth werden die Lebenspunkte des und/oder Sie erstellen noch Raumschiffs neu gesetzt. Dazu wird der Variablen xFighter- weitere Objekte (Alternativen Health der Wert des Arguments value zugewiesen. Anschlie- zu Asteroiden), die eine höhere Punktzahl ergeben. ßend wird der MovieClip healthBar.bar entsprechend skaliert.

20.5.8 Schwierigkeitsgrad erhöhen Der 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);

20.5 Asteroids-Spiel | 813 4: levelTimer.start(); Alternative: Schwierigkeitsgrad 5: function setLevelUp(e:TimerEvent):void { Sie können sowohl die Zeitan- 6: asteroidTimer.delay-=50; gaben als auch die Wiederho- lungen der Erhöhung des Levels 7: } anpassen, um die Schwierigkeit des Spiels zu erhöhen oder zu Zunächst wird ein neues Timer-Objekt initialisiert (Zeile 2). Das reduzieren. Beachten Sie dabei Timer-Objekt sorgt dafür, dass siebenmal im Abstand von zehn jedoch, dass der Wert der Eigen- Sekunden (10.000 Millisekunden) die Funktion setLevelUp auf- schaft delay des asteroidTimer- gerufen wird. Die Funktion setLevelUp reduziert den Wert der Objekts nicht gleich oder kleiner als 0 werden darf. Eigenschaft delay des asteroidTimer-Objekts um 50.

20.5.9 Schussenergie aufladen Immer 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 erzeugen In der Bibliothek finden Sie einen MovieClip »Energy«, der mit einer gleichnamigen Klasse verknüpft wurde.

814 | 20 Spieleprogrammierung 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(); GE Abbildung 20.19 7: myEnergy.x=randomExt(0+myEnergy.width,stage. Der MovieClip »Energy«, der mit stageWidth-myEnergy.width); der Klasse Energy verknüpft 8: myEnergy.y=0-myEnergy.height; wurde. 9: addChild(myEnergy); 10: myEnergy.addEventListener(Event.ENTER_FRAME, Alternative: Schwierigkeitsgrad moveEnergy); Sie können den Schwierigkeits- 11: } grad beeinfl ussen, indem Sie die 12: function moveEnergy(e:Event):void { Stärke der Aufl adung ändern. Sie 13: if (e.currentTarget.y

20.5 Asteroids-Spiel | 815 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). Vermeidung von Compiler- Ab Zeile 19 wird geprüft, ob der Energiepunkt mit dem Raum- Fehlern zur Laufzeit schiff kollidiert. Findet eine Kollision statt, wird der Energiepunkt Es kann vorkommen, dass der entfernt (Zeile 22 und 23), und der Sound myEnergySound wird Energiepunkt zu diesem Zeitpunkt abgespielt (Zeile 24). nicht mehr existiert. Um Compi- ler-Fehler zur Laufzeit zu vermei- Sollen die aktuellen Lebenspunkte des Raumschiffs plus 0,3 den, wurde der Teil in einen try/ kleiner oder gleich 1 sein (Zeile 25), wird der entsprechende catch-Block eingebunden. 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 erzeugen Neben 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();

816 | 20 Spieleprogrammierung 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

20.5.12 Spiel beenden Wenn 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:

20.5 Asteroids-Spiel | 817 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

Hinweis: myEnergy- und In Zeile 1 bis 3 wird zunächst eine Hilfsfunktion randomExt myMotion-Objekte definiert, die einen Zufallswert eines bestimmten Wertebe- Die Objekte myEnergy und reichs zurückgibt. Der Wertebereich wird durch die Argumente ­myMotion müssen nicht unbedingt bestimmt. Die Funktion wurde bereits vorher mehrmals benutzt, entfernt werden. Sie bewegen sich autonom nach unten bis au- um Objekte zufällig zu positionieren und eine zufällige Geschwin- ßerhalb der Bühne und werden digkeit zu definieren. dann entfernt. 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). Alternative: Mauszeiger Mithilfe einer for-Schleife werden die Elemente des Arrays einblenden asteroidArray durchlaufen und von der Anzeigeliste entfernt Wenn Sie den Mauszeiger zu Be- (Zeile 12 bis 15). Zum Schluss springt der Lesekopf der Haupt- ginn ausgeblendet haben, sollten zeitleiste auf das Bild mit dem Bildbezeichner Highscore (Zeile Sie ihn jetzt wieder einblenden. 16). Damit ist die Programmierung der Logik des Spiels abge- Ergänzen Sie den Code innerhalb schlossen. der Funktion endGame dazu um folgende Zeile:

Mouse.show();

818 | 20 Spieleprogrammierung FE Abbildung 20.20 Das fertiggestellte Spiel im Flash Player

20.6 Verbesserungen

Das Spiel ist so, wie es ist, noch ziemlich simpel und bietet auf Vielfältige Aufgaben Dauer keine tatsächliche Herausforderung. Es lässt sich jedoch Spieleentwicklung ist grundsätz- relativ einfach erweitern und dadurch deutlich interessanter lich eine herausfordernde Auf- gabe, da man sich sowohl mit gestalten. Einige Möglichkeiten dafür haben wir in der Margina- Grafi k, Sound als auch mit der lie bereits genannt. technischen Umsetzung bzw. Pro- Professionelle Entwicklungsteams von Browserspielen besitzen grammierung beschäftigen muss. 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.fl­ashgames.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.

20.7 Highscore | 819 Index INDEX

^ 354 .m1v 583 ActionScript 1 328 - 348 .m2p 583 ActionScript 2 328 -- 349 .m2t 583 ActionScript 3 329, 837 ! 353 .m2ts 583 ActionScript 3.0-Klasse 447 != 350 .m4v 583 ActionScript-Editor 329 !== 350 .mov 583 ActionScript-Entwicklungsum­ .. 729 .mp4 583 gebungen 842 @ 728 .mpg 583 ActionScript Viewer 855 * 348, 645 \n 625 Activeden 498 *= 349 .php 668 addChild 371 / 348, 661 .php4 668 addChildAt 371 /= 349 .qt 583 addController 657 & 353, 634, 869 .savers 847 ADDED_TO_STAGE 381 && 353 .scr 847 addEventListener 365, 376, 399, % 348 .sol 802 501 + 348 .wmv 583 Addieren 531 ++ 349 Addition 348 < 350 A Admin 671 << 354 a 624, 651 Adobe AIR 833 <= 350 Abbremseffekt 239 Adobe Audition 550 == 350 Abdunkeln 530 Adobe Device Central CS5 841 === 350 Abmessung des Weichzeichners Adobe Exchange 50 > 350 590 Adobe Flash Catalyst 837 >= 350 Abprallen 798 Adobe Flash Lite 840 >> 354 abs 427 Adobe Flex 835 | 354 Abschluss 77 Adobe LiveCycle Data Services || 353 Abschrägen 531 836 ~ 354 Abspielgeschwindigkeit 161 Adobe Media Encoder 583 $_FILES 767 Abspielrichtung 150 Adobe Media Player 585 $_POST 830 Abspielzeit 604 550 3D-Animationen 849 Abstandsberechnung 414 Adobe Sound Document 547 3D-Bewegung 418 Abwärtskompatibilität 286 ADPCM 548 3D-Drehungswerkzeug 109 acos 427 Aktualisieren 549 Fluchtpunkt und Perspektive 111, ActionScript Aktualisierungen 51 112 Datentypen 338 album 560 3D-Engines 849 Editoren 448 align 642 3D-Flip 435 Ereignis-Listener 376 Alle einblenden 333 3D-Pinsel 83, 87 Ereignisprozeduren 376 allowFullScreen 601 3DS Max 850 Ereignisse 376 alpha 367, 397 3D-Versetzungswerkzeug 110 Format 333, 334 Alpha 71, 531 9-teiliges Segmentraster 118, 513, Funktionen 360 Als Video für Mobilgeräte in SWF 514 Loader 382 zusammengefasst importieren .asf 583 Modulo 348 593 .avc 583 Operatoren 348 Amayeta SWF Encrypt 5.0 856 .avi 583 Schleifen 356 Amplitude 546 .dv 583 Typisierung 339 Analoge Uhr 468 .dvi 583 Variablen 336 anchorX 486 .flv 583 Zeitleistensteuerung 364 anchorY 486

Index | 877 Ändern der Videogröße 586 aus Speicher entfernen 372 atan 427 Android 840 Eigenschaften 367, 368 atan2 424, 427 An Hilfslinie ausrichten 124 entfernen 370 ATOM 733 Animation 149 Ereignisse 380 Attribute 705 3D-Bewegung 209 graphics 479 AU 547 Abspielrichtung 150 hinzufügen 370 Audacity 550 Animation anlegen 162 Sichtbarkeit 373 Audio-CD 545 beenden 409 Apache 668 Audio-Editor 550 Beschleunigung 239 API 328 Audio einschließen 595 Bildbezeichner 159 appendChild 741 Audio-Ereignis 547 Bild-für-Bild 160 appendText 645 Audio-Player 573 Geschwindigkeit ändern 168 Apple iOS 840 Audio-Spur 592, 602 Inverse Kinematik 230 Arbeitsbereiche Audio-Stream 547 Klassische Tweens 197 auf einen anderen Computer Audio Video Interleaved 583 kopieren 196 übertragen 62 Auf (Zustand) 552 loopen 409 auswählen 62 Auf Ebenen verteilen 264 Posenanimation 240 löschen 62 Aufhellen 530 Sequenzen 432 Arbeitsfläche 55 Aufzählungszeichen 624 Skalierung 209 Arbeitsumgebung 45 Ausblenden 554 Steuerungspunkt 240 laden 62 Ausdrücke (regulär) 661 Szenen 158 speichern 62 Ausführungszeit 778 Timing 202 ARGB 537 Ausgabe-Fenster 335 umkehren 432 Argumente 361 Ausgabeformat 585 Zeitleiste 149 Arkuskosinus 427 Ausgabegröße ändern 588 Zwiebelschaleneffekt 170 Arkussinus 427 Ausrichten Ankathete 415 Arkustangens 427 an Pixeln 78 Ankerpunkt Array 338, 343 TLF-Text 279 entfernen 104 assoziativ 344 von Text 251 umwandeln 101 Feldwerte 343 Auswahlbereich ausblenden 333 Ansicht indiziert 343 Auswahl-Werkzeug 102 An Fenster anpassen 56 Länge 345 Auswählbar 617 Vergrößerung 56 mehrdimensional 345 Auswählen, ähnliche Farben 105 zentrieren 56 Methoden 343, 344 Auszeichnungen 249 Anti-Aliasing 257 sortieren 345 Fettdruck 250 antiAliasType 638 sortieren (mehrdimensional, Kapitälchen 250 AntiAliasType.ADVANCED 638 assoziativ) 346 Kursiv 250 AntiAliasType.NORMAL 638 typisiert 347 autoAlpha 438, 439 Anwendungsbereiche 32 Verkettung 343 Auto-Format 333, 334 aktuelle Meldungen 33 Array.CASEINSENSITIVE 346 AUTO_INCREMENT 705 Animationen 33 Array.DESCENDING 345, 346 Automatischer Import 455 Benutzeroberflächen 33 Array.DESCENDING. 746 Automatischer Klassen-Import E-Learning 36 Array.NUMERIC 345, 346, 746 844 Flash gegen HTML 5 35 Array.RETURNINDEXEDARRAY Automatischer Paket-Import 844 Präsentationen 34 346 Automatisch unterschneiden 253 Spiele 34, 35 artist 560 autoSize 638 Video-Anwendungen 35 AS3CoreLib 827 AVE Imperator 855 Anzeigeklassen 366 ASC 712 AVM 329 Anzeigeliste 365 asin 427 AVM1Movie 369 Reihenfolge 371 ASP 667 Away 3D 849 Reihenfolge ändern 373 Assets 513 Axialis Professional Screensaver Anzeigeobjektcontainer 365 Assoziative Arrays 344 Producer 847 Anzeigeobjekte 365, 479 Asteroids 804

878 | Index B Eckpunkt 187 Bilder b 624 Glättungspunkt 187 Ansteuerung 160 Back 434 Graphen 186 gleichzeitig bearbeiten 171 background 638 Schlüsselbild hinzufügen 186 kopieren 164 backgroundAlpha 652 verwenden 188 mehrere gleichzeitig bearbeiten backgroundColor 638, 652 Zeitleiste Umgang 186 171 Backslashes 723 Bewegungspfad 180, 201 Schlüsselbilder 155 entfernen 723 Beispiel 180 Bild-für-Bild-Animation 160 Bandbreiten-Profiler 314 drehen 180 Anwendungsbereiche 161 Bild-für-Bild 315 eigenen Pfad erstellen 183 Beispiel 161 Download-Einstellungen 315 erstellen 180 Bildrate 161 Optimierung des Ladeverhaltens Umformen 179 Bildrate festlegen 161 315 Bewegungsrichtungen 405 in MovieClip verschachteln 166 Streaming-Grafik 314 Bewegungs-Tween 172, 175 Bildlauf 647 Barrierefreiheit 321, 835 Animation an Pfad erstellen Bildrate 161 Base64Encoder 827 180 richtige Bildrate 161 Basisklasse 369, 375, 467, 475 Beispiel 175 Timing 202 Batch-Verfahren 585 Beschleunigung 178 Bildschirmleseprogramme 321 Baumpinsel 84, 93 Drehung 178 Bildschirmschoner 847 BCC 698 Eigenschaften 177 BINARY 678 Bearbeitbar 617 Eigenschaften animieren 173 Bindungswerkzeug 240 Bearbeitbarer Text 524 erstellen 172, 175 Binär 353 beginFill 487 Geschwindigkeit 180 Binärsystem 353 beginGradientFill 495 Instanzname 177 Bitmap 369 Begrenzungsrahmen 134, 790 Optionen 177, 178 Dateigröße 213 Begrüßungsbildschirm 45 Pfad 178 Eigenschaften 266 Benutzerdefiniert 521, 554 Pfad drehen 180 in Vektor umwandeln 212 Benutzerdefinierte Preloader- Pfadumformung 179 Komprimierung 520 Schleife 616 Tweenlänge ändern 181 mit ActionScript 536 Benutzerdefiniertes Anti-Aliasing verlängern 176 nachzeichnen 213 264 Bewegungsvoreinstellungen 195 bitmapData 536 Beschleunigung 178, 204, 239, 404 bezier 439 BitmapData-Klasse 537 Abbremseffekt 239 Bézierkurven 485 Bitmap-Eigenschaften 520 abbremsen 204 bezierThrough 439 Bitmap-Filter 531, 533 Beispiel 206 Bühne 55, 365 animieren 532 Beschleunigungstypen 239 Größe einstellen 57 Bitmap-Füllung 116 Bewegungs-Editor 191 Bibliothek 141 Bitmapgröße berechnen 524 Stärke 239 bereinigen 144 Bitmap in Vektoren umwandeln verwenden 192 Elemente löschen 142 105 BEVEL 482 externe 146 Bitmap-Klasse 536 bevelFilter 439 gemeinsam genutzt 144 Bitmap-Linien 485 BevelFilter 534 Klassen-Instanzen erzeugen 374 Bitmap-Text 264 Bewegung 209, 406 Ordner 143 Bitrate 549 in Raum 209 Ordnung und Struktur 142 Bitshifting 354 linear 406 BIGINT 706 Bitverschiebung 354 nicht linear 406 Bildbezeichner 158, 159 Bitweise 353 Bewegungs-Editor 184 ansteuern 160 Blaze 3D 850 Anzeige steuern 184 Typen 159 Bleistift 78 Beispiel 188 zuweisen 160 Blender 850 Beispiel Beschleunigung 192 Bildebene 210, 523, 527 blendMode 533 Beschleunigung 191, 192 Rotation 210 BlendMode.ADD 533 Beschleunigungstypen 191 Bildebene Drehung 210 BlendMode.ALPHA 533

Index | 879 BlendMode.DARKEN 533 ByteArray 575, 576 ContainerController 657 BlendMode.DIFFERENCE 533 bytesLoaded 573, 604, 605, 764 Container und Fluss 280, 619 BlendMode.ERASE 533 bytesTotal 573, 604, 605, 764 contains 744 BlendMode.HARDLIGHT 533 contentLoaderInfo 382 BlendMode.INVERT 533 C controlX 486 BlendMode.LAYER 533 Cache 681 controlY 486 BlendMode.LIGHTEN 533 Caching verhindern 729 ConvolutionFilter 534 BlendMode.MULTIPLY 533 call 856 Cookie 801 BlendMode.NORMAL 533 Call-Stack 390 cos 427 BlendMode.OVERLAY 533 cancel 762, 767 createGradientBox 495 BlendMode.SCREEN 533 CANCEL 769 creationDate 770 BlendMode.SHADER 533 caps 482 Cross-Domain-Policy 563, 730, BlendMode.SUBTRACT 533 CapsStyle.NONE 482 858 Blitzpinsel 84, 90 CapsStyle.ROUND 482 CSS 315, 640, 652 blockindent 625 CapsStyle.SQUARE 482 Flash-Film mittig im Browser blockIndent 642 CASEINSENSITIVE 346 zentrieren 316 Blocksatz 252 catch 813 Positionierung 315 TLF-Text 279 CC 698 Cubic 434 Blumenpinsel 84, 90 CDATA 739 Cue-Point-Name 606 blurFilter 439 CHANGE 503 Cue-Points 605 BlurFilter 534 CHAR 706 Ereignis 607 BMP 519 Charakteranimation 235 Navigation 610, 611 Bogenmaß 413 Checkbox 500 currentFPS 605 bold 512, 642 chmod 686 currentTarget 377, 633 Bones Cinema 4D 850 curveTo 485 Darstellung 233 Circ 434 CustomEase 434 Eigenschaften 232 clear 481, 802 Custom Ease Builder 434 Gelenk 233 CLICK 380, 788 Hierarchie 232 Click to Flash 328 D Position 233 client 599, 605, 606, 610 Darüber (Zustand) 552 Steuerungspunkt 240 close 561, 573, 603 data 508, 633, 677, 695, 802 Verbindung entfernen 241 CMS 765 DataEvent.UPLOAD_COMPLETE_ Verbindung hinzufügen 242 Code Completion 843, 846 DATA 770 Bone-Werkzeug 231 Codefragmente 331, 333 dataFormat 633, 678 Boolean 338 Codehinweis zeigen 333 Data Modelling 702 border 638 Coderedundanz 475 date 675 borderColor 638 Collision Detection 789 Date 681 Bounce 434 color 512, 642, 652 DATE 706 Bouncing 798, 799 colorMatrixFilter 439 Dateiendungen überprüfen 771 BoundingBox 134 ColorMatrixFilter 534 Dateigröße br 624, 651 colorTransform 439 analysieren 291 Breakpoints 390 columnCount 652 SWF-Datei 43 browse 757, 765, 767 columnGap 653 Dateirechte 686, 768 Browser-Caching 681 columnWidth 653 Datenbank erstellen 703 verhindern 681 comment 560 Datenbank-Login 710 Browser-Cookie 801 comments 731 Daten lokal speichern 803 bufferLength 605 Compiler-Fehler 362, 389 Datensatz 708 bufferTime 605 COMPLETE 383, 574, 758, 762, 769 aktualisieren 726 Button 501 Component Assets 514 einfügen 707 buttonMode 825 computeSpectrum 575, 576 Datentyp 336, 338, 673, 705, 741 Button-Sound 552 concat 343 ermitteln 340 byteArray 576 connect 598, 857 Überprüfung 370, 723

880 | Index Datentypkonflikt 340 Ansicht verschieben 56 Name ändern 151 Datentypumwandlung 341 Dokumentklasse 464 Negativbeispiel 151 DATETIME 706 Doppelklick 380 Ordner 152 Datum 665, 675 Doppelte Variablendefinition 395 Ordner steuern 152 Debuggen 389 DOUBLE 706 Posenebene 235 Debug-Konsole 389 DOUBLE_CLICK 380, 788 Reihenfolge 151 Debug-Optionen 333 do-while 357 Rotation 210 DECIMAL 706 download 762, 767 sperren 154 Decompiler 291 Download 761 steuern 153 default 351 Einstellungen 315 Tween 173 defaultTextFormat 639, 640 simulieren 315 echo 674, 714 Dekompilieren 855 Drag & Drop 332, 787 Echte Kursive 250 Dekorpinsel 84, 88 draw 795 Eckpunkt 187 Deko-Werkzeug 83 drawCircle 494 Eckrundungen 96, 493 3D-Pinsel 87 drawEllipse 494 836 Baumpinsel 93 Drawing-API 479 ECMA 327 Blitzpinsel 90 drawRect 488 ECMAScript 727 Blumenpinsel 90 drawRoundRect 493 Effekt 554 Dekorpinsel 88 drawSpectrum 579 Eigene Klassenpfade 454 Feuerpinsel 89 Dreamweaver 632 Eigene Pakete 456 Flammenpinsel 89 Drehung 178 Eigenschaften 451 Gebäudepinsel 88 Dreieck 414 Bewegungs-Tween 177 Partikelsystem 91 DRM 863 Einbettung 620 Rankenfüllung 84 dropShadowFilter 440 in HTML 293 Rasterfüllung 85 DropShadowFilter 534 mit dem SWFObject 301 Rauchanimation 92 Durchschussmodell 617 mittig positionieren 316 Symmetriepinsel 86 dynamic 452 Einblenden 554 delay 814 Dynamische Klasse 452 Eingabefokus 628 delayedCall 431 Dynamische Textfelder 247, 617 Eingabehilfen 321 delete 743 Dynamische Variablen 339 Symbole 322 De MonsterDebugger 392 Eingabetextfelder 617 DESC 712 E Eingebettete Schriften 263 DESCENDING 345, 346 E 428 Eingebettete Videos 595 Desktop-Anwendungen 848 E4X 727 Einstellungsmanager 863 DF3 644 easeIn 434 Einzeilig 619 DF4 644 easeInOut 434 Elastic 434 Diagramme 836 easeOut 434 Elemente die 712, 830 Easing 406, 407, 433 gemeinsam nutzen 146 Differenz 531 Easing Equations 433 in anderen Flash-Filmen nutzen Digital Video 583 Ebene 530 146 direction 653 Arbeiten 150 Ellipse 271 DisplacementMapFilter 534 bei Veröffentlichung ignorieren Ellipsenförmige Bewegung 422 DisplayList 365 154 Ellipsengrundform 98 DisplayObject 366, 369 Bewegungs-Tween 173 Ellipsenwerkzeug 97 DisplayObjectContainer 366, 369 Darstellungsoptionen 157 Ellipse zeichnen 494 dispose 541, 795 Ebenenmodell 150 E-Mail 697 DISTINCT 713 Ebenenordner erstellen 152 E-Mail-Adresse 665 div 650 in Führungsebene umwandeln E-Mail-Header-Injection 698 Division 348 200 E-Mail-Link 255 Dokumenteigenschaften 56 löschen 151 E-Mail-Verknüpfung 255 Dokumentfenster Maske zuweisen 220 embedFonts 639, 645 Ansicht vergrößern/verkleinern 56 mit Ebenen arbeiten 150 EMBED-Tag 301

Index | 881 Emulieren 841 Externes Video mit Playback- Fenstermodus Veröffentlichung endFill 488 Komponente laden 593 296 Endlose Ausführungen 364 Externe Videos 597 Feueranimation 84, 89 Endlosschleifen 357, 675 FFTMode 576 Endloswiederholungen 561 F FileFilter 766 ENTER_FRAME 381, 398 F4V 583 fileList 781 Entwicklungsumgebung 46 FadeOut 408 File Packager 581 anpassen 57 Fading-Animation 411 File Promises 835 Eolas-Patentverletzung 301 Fallunterscheidung 349 FileReference 757 Equalizer 576 false 338 Dateiendungen 771 Ereignis-Listener 376, 398, 768 FAQ 305, 777 Download 761 entfernen 378 Farbe anpassen 531 Eigenschaften 770 Ereignisprozeduren 376, 398 Farbeimer 113 Ereignisse 768 Ereignisse 376, 398, 551 Lückengröße 113 Fehlerursachen 777 Error 389 Farbeimerwerkzeug Fortschrittsanzeige 763 Error Highlighting 843 Füllung sperren 114 Methoden 767 Ersetzung (Text) 662 Farbeinstellungen 212 Upload 765, 777 Escape-Sequenzen 634 Farbharmonieregel 73 FileReference.creationDate 770 event 606 Farbpalette bearbeiten 72 FileReferenceList 781 Event.ADDED_TO_STAGE 381 Farbschema 73 FileReference.modificationDate Event.CANCEL 769 bearbeiten 73 770 Event.CHANGE 503 erstellen 73 FileReference.name 770 Event.COMPLETE 382, 383, 574, Farbton 211, 531 FileReference.size 770 758, 762, 769 Farbverlauf 115 FileReference.type 770 Event.ENTER_FRAME 381, 398 über mehrere Formen 114 FileZilla 755 Event.EXITING 835 Farbe einfügen 115 Film exportieren 853 Event.ID3 560, 574 Farbe entfernen 116 Dateiformate 320, 321 Event.INIT 382, 383 linear 115, 221 Film komprimieren 289 Event.MOUSE_LEAVE 788 radial 116 Filter 529, 531 Event.OPEN 384, 769 transparente Farbe 222 filters 534 Event.REMOVED_FROM_STAGE Farbverlauf – Geschliffen 531 final 475 381 Farbverlauf – Glühen 531 Fixierung anwenden/aufheben 457 Event.SELECT 758, 765, 770 Farbverlaufsfüllungen 494 Flaches Bitmap 523, 528 Event.SOUND_COMPLETE 562, Farbverlaufslinien 494 Flammenpinsel 84, 89 575 Farbverlaufswerkzeug 117 Flash Builder 44, 836 Event.UNLOAD 384 FDT 845 Flash Catalyst 837 exec 661 Feder 38, 240 Flash Components 498 EXITING 835 aktivieren 240 Flash-Cookie 801 exp 427 Feed 733 Flash-Datei (ActionScript 3.0) 335 Experten-Modus 330 Fehlende Schriften ersetzen 269 Flash Debug Player 389 Expo 434 Fehlerbehebung 454 Flash Decompiler Trillix 855 Export 320 Fehlermeldungen 394 FlashDevelop 842 Bild 320 Fehlersuche 389 Flash Development Tools 845 Film 320 Fehlerursachen 394 flash.display 366 für ActionScript 375, 558 Felder 338, 705 Flash-Ebenen 526 für gemeinsame Nutzung zur Feldwerte 343 Flash-Export 286 Laufzeit 145, 644 Fenster ausgeblendete Ebenen Exporteinstellungen 586, 589 maximieren 57 ­exportieren 289 Exportformate 320 minimieren 57 Debugging erlauben 291 extends 476 schließen 57 Film komprimieren 289 ExternalInterface 856 verankern 58 Gerätesound exportieren 289 Externe Bibliothek 146 Werkzeuge 51 Größenbericht 290

882 | Index Sicherheit bei lokaler Wiedergabe fl.transitions 429 Modi 108 292 Fluchtpunkt 112 Frequenz 546 Skript-Höchstzeit 292 flush 802 from 431 Soundeinstellungen übergehen FLV-Format 583 From 698 289 FLV in SWF einbetten und in Zeit- FROM 712 SWC exportieren 290 leiste abspielen 593 FTP-Zugang 592 Trace-Aktionen übergehen 291 FLV-Media Player 585 Führungsebene 198 Version 286 FLV Player 585 Füllfarbe 70, 79 vor Import schützen 291 FocusEvent.FOCUS_IN 629 Fülltyp 495 Flash-Film FocusEvent.FOCUS_OUT 629 Füllung 487 Bildrate 57 FOCUS_IN 629 Strichlinie hinzufügen 113 Größe 57 FOCUS_OUT 629 Funktionen 360, 675 Hintergrundfarbe 57 Fokus 629 endlose Ausführungen 364 mittig im Browser 316 Folienpräsentationen 838 Geltungsbereich 361 mittig im Browser am oberen und Follow TCP Stream 689 rekursive 363 unteren Rand 318 font 512, 642, 645 Funktionsargumente 361 testen 50 Font 638, 645 Funktionsparameter 361 transparent 313 font color 624 FXG 528 Flash Games 819 font face 624 Flash gegen HTML 5 35 fontFamily 653 G Flash-Historie 29 fontName 645 Gallery 503 Flash-JavaScript 49 font size 624 Ganzzahl 338 Flash Lite 840 fontSize 653 Gapless-Playback 563 Flashloaded 498 fontStyle 653 GarageBand 550 Flash Media Server 582, 593 fontWeight 653 Garbage Collector 372, 411 Flash Player for 358, 375, 675 Gaußscher Weichzeichner 590 Kontextmenü 311 foreach 675 Gebäudepinsel 83, 88 Version 286 for-each-in 360 Gedankenstrich 271 Flash Player Trust 864 for-in 359 Gegenkathete 415 Flash-Player-Verbreitung 328 format 652 Geltungsbereich 342 Flash-Player-Versionen testen 856 Formatierungseinstellungen TLF- Dokumentklasse 465 Flash-Spiele 819 Text 274 von Funktionen 361 FlashVars 305 FormatValue.AUTO 652 Gemeinsame Nutzung 548, 644 einsetzen 307 FormatValue.INHERIT 652 Gemeinsam genutzte Bibliothek FlashVars Zugriff aus Flash 305 Formen 479 144 Flash-Version Arten 70 genre 560 aktivieren 51 Formmarken 216 Geometrie 412 deaktivieren 51 einsetzen 216 Geräteprofile 841 feststellen 294 entfernen 217 Geräteschriftarten 258, 620, 643 registrieren 51 Reihenfolge 217 Mac 258 583 Form-Tween 212 Maskierung 259 Flash-Video-Formate 583 Formmarken einsetzen 216 Vorteil 259 FLA-Wiederherstellung 855 Formularanwendungen 838 Gerätesound 548 fl.controls 500 Fortschrittsanzeige 862 Geschichte von Flash 29 Flex 835 Foto (JPEG) 520 Geschwindigkeit 180, 404 Flex Builder 836 Fourier-Transformation 576 ändern 168 Flex-Charting-Komponenten 836 frame 440 Gesten 834 Flex SDK 842 frameLabel 440 GESTURE_ZOOM 834 Fließkommazahl 706 Freihandwerkzeug GET 684 FLOAT 706 Begradigen 79 getBounds 792 floor 427, 800 Glätten 79 getChildAt 369 flowComposer 657 Frei-transformieren-Werkzeug 108 getChildByName 370

Index | 883 getChildIndex 371 Hartes Licht 531 HTTP_STATUS 768, 769 getLineText 646 Hashfunktion 827 HTTPStatusEvent.HTTP_STATUS getLocal 802 Hashwerte 828 768, 769 getPixel 538 Header-Injection 698 Hypertext Preprocessor 667 getPixel32 540 height 367, 397, 637 Hypotenuse 415 getPixels 540 Helligkeit 211, 531 Getter 472 hexColors 440 I getTime 681 hide 806 i 624 getTimer 799 Hierarchie 365 id3 573 getVector 540 Highscore 819 ID3 560, 574 g-Flag 662 Highscore-Sicherheit 826 if 349, 673 GIF 382, 519 Hilfe 333 if-else 351 GIF-Export 297 Hilfslinie 123 if-else-if 351 Gleich 350 anzeigen 123 ignoreComments 731 Glühen 531 ausrichten 124 ignoreWhitespace 732 Globales Error Handling 835 bearbeiten 123 Illustrator-Import 525 Globale Sicherheitseinstellungen entfernen 123 Im Code zusammengeführt 616 863 sperren 125 img 624, 651 glowFilter 440 Hilfswerkzeuge 118 import 454 GlowFilter 534 9-teiliges Segmentraster 118 Importieren 550 Glättungspunkt 187 Handwerkzeug 121 Importierte JPEG-Daten Golem.de 734 Hilfslinien 123 verwenden 520 gotoAndPlay 365 Raster 125 include 711 gotoAndStop 365 Zoomwerkzeug 122 indent 625, 642 GradientBevelFilter 534 Hineinspringen 391 Index 705 GradientGlowFilter 534 Hintergrundfarbe 57 Index-Reihenfolge 371 GradientType.LINEAR 495 hitTest 789, 792 Indizierte Arrays 343 GradientType.RADIAL 495 hitTestObject 789, 811, 812 Inheritance 474 Gradmaß 413 hitTestPoint 789, 790 INIT 383 Grafikaustausch-Format 528 Hüllkurve bearbeiten 554 Inkompatibilitätsbericht 526 graphics 479 HORIZONTAL 481 In-Punkt 589 Größe durch Skalieren anpassen hspace 624 INSERT 720 587 HTACCESS 859 Instantiierung 446 Größer als 350 HTC 840 InstantStorm 848 Größer gleich 350 HTML, Variablen übergeben 307 Instanz 130 Groß-/Kleinschreibung TLF-Text HTML 5 35 auf Bühne platzieren 595 275 HTML 5 gegen Flash 35 Instanzeigenschaften 127, 130, 462 groupName 504 HTML-Absatz 624 Instanzmitglied 462 Grundfarbe 530 HTML-Export 293 Instanzname 177, 398, 499 Grundlinienverschiebung TLF-Text HTML-Formatierungen 622 In Symbol konvertieren 129 279 HTML-Ladeverhalten 313 int 338 Gruppierung aufheben 121 HTML-Tags 624 INT 706 Gästebuch 715 htmlText 622, 639 Integer 338 GTween 429 HTML-Textfelder 622 InteractiveObject 369, 637, 785 HTTP 581, 667 Interaktion 785 H GET 684 internal 460, 461, 466 H.264 583 POST 686 Internetadresse mit Text Haarlinie 77 POST-/GET-Überwachung 688 verknüpfen 254 Hacker 820 HTTP Dynamic Streaming 581 Internet Explorer 7 301 Haltepunkte 390 HttpFox 688 int.MAX_VALUE 562 Handy 839 HTTP-Methode 684, 686 Inverse Kinematik 230 Hardwarebeschleunigung 292 HTTPS 698 Beispiel 235

884 | Index Beschleunigung 239 KeyboardEvent.KEY_UP 381, 785, Komponenten Bindungswerkzeug 240 865 Eigenschaften 501 Bones Eigenschaften 232 keyCode 786 Ereignisse 502 Bone-Werkzeug 231 Key-Codes 865 Methoden 501 mit ActionScript nutzen 234 KEY_DOWN 381, 785, 865 Typ anpassen 511 Pose einfügen 237 KEY_UP 381, 785, 865 UIScrollBar 648 Posenanimation 240 kill 431 Video-Playback 593 Posenebene 231 killDelayedCallsTo 431 Komponentenparameter 499 Skelett-Animation 234 killTweensOf 431 Komprimierung 520, 548 Skelett-Hierarchie 233 Kilohertz 546 Konstruktor 449 Steuerungspunkte ausrichten 242 Kinematik 230 Kontaktformular 689 Verbindung entfernen 241 Kinsoku Shori Type 617 Kontextmenü 51 Verbindung hinzufügen 242 Klasse 446 Kontrast 531 IO_ERROR 383, 560, 574, 600, aus Bibliothek 374 Kontrolle des Ladevorgangs 382 677, 768, 769 dynamische 452 Konturansicht 154, 171 IOErrorEvent.IO_ERROR 383, erstellen 450, 458 Konturformat 643 560, 574, 600, 768, 769 mit Symbol verknüpfen 467 Koordinatensystem 412 iOS 840 Klassenbezeichner 448 Kosinus 415 iPad 840 Klassenmitglieder 462 Kreisbewegung 422 iPhone 42, 840 Klassenname 447 Kreiszahl 413, 428 IPhone-Packager 840 Klassenpfad 453, 456 Kreis zeichnen 97, 494 is 370 Klassischer Text vs. TLF-Text 273 Kryptografie 827 isset 697 Klassische Tweens 197 Kuler-Bedienfeld 73 italic 512, 642 Abbremsung 203 Kurvensegment 100 item 732 an Pfad ausrichten 198, 199 Kurven zeichnen 485 Beispiel 199 Kurzschreibweise 349, 352 J Beschleunigung 203, 206 Japanisch 651 erstellen 197 L JavaScript (Zugriff) 856 Führungsebene 198 label 504 join 343 in Führungsebene umwandeln Label 504 joints 482 200 Ladefortschritt (Preloader) 860 JointStyle.BEVEL 482 kein Bewegungspfad 197 Ladeverhalten von Flash-Filmen JointStyle.MITER 482 Pfad hinzufügen 198 313 JointStyle.ROUND 482 Schlüsselbilder einfügen 200 Lame 563 JPEG 382, 519 Timing 202 Lasso, Auswahl abschließen 105 JPEG-Deblocking 522 Kleiner als 350 Lassowerkzeug 104 JPEG-Export 299 Kleiner gleich 350 Lateinisch einfach 622 JSFL-Format 49 Kodierung 585 latin1_german1_ci 704 JumpEye Components 498 Kollation 704 Laufweite 655 Kollisionserkennung 789 Laufzeitfehler 389 K Begrenzungsrahmen 790 Laufzeitumgebung 833 Kanal 548 pixelbasiert 792 Lautstärke 546, 568, 603 Kantenglättung 257 pixelbasiert (transformiert) 794 Lautstärkeregler 603 Kapitälchen 250 positionsbasiert 796 Layout Kaskade 652 punktbasiert 790 Spaltenbreite anpassen 61 Kennwort 619 Kommagetrennt 344 Zeilenhöhe anpassen 61 kerning 642, 653 Kommentarblock anwenden 333 leading 625, 642 Kerning 252 Kommentare 589, 673, 731 Lebenspunkte 814 Key 865 entfernen 333 leftMargin 642 KeyboardEvent 786 Kommentarfunktionen 335 leftPeak 574 KeyboardEvent.KEY_DOWN 381, Kommunikation zwischen zwei leftToLeft 575 785, 865 Flash-Filmen 857 leftToRight 575

Index | 885 Leistungsvergleich von Schleifen Lokale Speicherung 760 einblenden 818 358 LONGTEXT 706 max 427 length 345, 573, 639, 731 Loopen 409 maxChars 639 Leserichtung 251 loose typing 339 max_execution_time 778 letterSpacing 512, 642 Lose Typisierung 339 Maximale Zeichenanzahl 619 li 624 Löschen 458, 531 max_input_time 778 Ligaturen 276 MAX_VALUE 562 Lightwave 3D 850 M Maya 850 Lineal 122 MacMouseWheelHandler 860 MD5 827 anzeigen 123 mail 697 MEDIUMINT 706 Linear 434 MAMP 669 MEDIUMTEXT 706 LINEAR 495 Manueller Zeilenumbruch 625 Mediävalziffern 271 Linearer Farbverlauf 115 Masken 218 Mehrdimensionale Arrays 345 lineBitmapStyle 485 Maskenebene 219, 220 Mehrere Argumente 362 lineBreak 653 Farbe 219 Mehrspaltiger Text 657 lineGradientStyle 494 Maskierung 723 Mehrzeilig 619 lineHeight 653 von Geräteschriften 260 memory_limit 778 LineScaleMode.HORIZONTAL 481 Math.abs 427 Menü LineScaleMode.NONE 481 Math.acos 427 Ansicht 48 LineScaleMode.NORMAL 481 Math.asin 427 Bearbeiten 47 LineScaleMode.VERTICAL 481 Math.atan 427 Befehle 49 lineStyle 480 Math.atan2 424, 427 Datei 47 lineThrough 653 Math.ceil 427 Debuggen 50 lineTo 480 Math.cos 427 Einfügen 49 Linien 479 Math.E 428 Fenster 51 gerade Linie erzeugen 100 Math.exp 427 Hilfe 51 Kurve erzeugen 100 Math.floor 427 Modifizieren 49 verbinden 77 Math.LN2 428 Steuerung 50 Linienenden 482 Math.LN10 428 Text 49 Liniensegment 100 Math.log 427 Zeitleiste 48 Linienwerkzeug 74 Math.LOG2E 428 Menüleiste 47 Linker Kanal 554 Math.LOG10E 428 Metadaten 591 List 502 Math.max 427 method 687 ListEvent 750 Math.min 427 Methoden 452 Live Error Highlighting 846 Math.PI 413, 428 Microsoft SQL Server 701 Live-Vorschau 498 Math.pow 427 Mikrofon 835 LN2 428 Math.random 427 min 427 LN10 428 Math.round 428 MinimalComps 498 Länge/Set 705 Math.sin 428 Minuskelziffern 271 load 382, 558, 559, 573, 687, 730, Math.sqrt 415, 428 Minute 468 757, 767 Math.SQRT1_2 428 Mischfarbe 530 Loader 368, 382 Math.SQRT2 428 Mischmodi 529, 533 LocalConnection 857 Math.tan 428 MITER 482 LOCAL_WITH_FILE 856 Matrix 495 Mitglieder 462 log 427 Matrix für Farbverläufe 495 mitterLimit 482 LOG2E 428 Maus 369, 381, 785 Mobile Endgeräte 839 LOG10E 428 Ereignisse 788, 789 modificationDate 770 Login 710 Mausrad 787 Modulo 348 Lokaler Geltungsbereich 342 Mausrichtung 424 Mojikumi 617 Lokaler Speicher 801 Maussteuerung 787 MonsterDebugger 392 Lokaler Videoplayer 584 Mauszeiger MorphShape 369 Lokaler Webserver 669 ausblenden 806 MOUSE_DOWN 380, 787, 788

886 | Index MouseEvent 376 mysql_fetch_array 713 Normal 530 MouseEvent.CLICK 380, 788 mysql_num_rows 713 NORMAL 481 MouseEvent.DOUBLE_CLICK mysql_query 712, 720 NOT 353 380, 788 mysql_real_escape_string 724 Notepad 632 MouseEvent.MOUSE_DOWN mysql_select_db 712, 720 Notepad++ 632, 709 380, 787, 788 MySQL Workbench 702 null 337, 372, 452, 534 MouseEvent.MOUSE_MOVE 381, Null 705 401, 789 N Number 338 MouseEvent.MOUSE_UP 380, 788 Nach links 554 NUMERIC 345, 346 MouseEvent.MOUSE_WHEEL NACH LINKS 354 Numerisch sortieren 345 787, 789, 859 Nach rechts 554 numLines 639 MouseEvent.ROLL_OUT 380, 789 NACH RECHTS 354 Nur auf lokale Dateien zugreifen MouseEvent.ROLL_OVER 380, 789 Näherungswerte 409 864 MOUSE_LEAVE 788 name 367, 370, 606, 639, 761, 770 Nur auf Netzwerk zugreifen 864 MOUSE_MOVE 381, 401, 789 Namenskonflikte 453 Nur Flash – Vollbild zulassen 601 Mouse.show 818 Namespace 395 Nur zum Lesen 617 MOUSE_UP 380, 788 NaN 341 MOUSE_WHEEL 787, 789, 859 Nativ 727 O moveTo 486 Natürlicher Logarithmus 427 Obfuscator 832, 855 MovieClip 338, 368 navigateToURL 761 Object 338 Bild-für-Bild-Animation 166 navigation 606 OBJECT-Tag 301 dynamische Klasse 809 Navigation 384 Objekte 445 Registrierung ändern 136 Negativ multiplizieren 530 anordnen 120 Tween erstellen 197 Netbook 839 erstellen 450 verschachteln 224 NetConnection 598 gruppieren 120 Vorteile 224 NET_STATUS 600 zählen 463 MP3 547, 548, 563 NetStatusEvent.NET_STATUS 600 Objektzeichnung 70 MP3-Player 839 NetStream 598 ODER 353, 354 MPEG 583 Eigenschaften 603 Ohne 554 MPEG 4 583 Ereignisse 600 ol 624 multiline 639 Neue Datei 458 onCompleteParams 435 Multiplikation 348, 530 Neuer Ordner 457 onCuePoint 606, 607 Multi-Preloader 862 Neues in Flash CS5 37 onMetaData 610 Multi-Touch 834 Benutzeroberfläche 37 onReverseComplete 435 Muster 661 Codefragmente 43 onReverseCompleteParams 435 MVC 649 Codegenerierung 39 onUpdateParams 435 MXML 837 CS Live 43 OPEN 384, 769 MySQL 701 Deko-Werkzeuge 40 opendir 779 Daten an Flash übergeben 713 Feder 38 openWithDefaultApplication 835 Datenbank erstellen 703 Integration Flash Builder 44 Operatoren 348, 673 Datenbanksätze einfügen 720 Inverse Kinematik 38 arithmetisch 348 Datenbankverbindung herstellen iPhone 42 bitweise 353 711 Neue Template-Vorlagen 42 einfach 348 Datentypen 705 SWF-Verlauf 43 is 370 Felder bearbeiten 706 Text-Engine TLF 38 logisch 352 Gästebuch 715 Verbesserte Video-Funktionen 41 Vergleich 349 phpMyAdmin 703 XFL-Dateiformat 40 OPML 733 Sicherheit 723 Neues Projekt 457 Optimal 556 Tabelle erstellen 704 new 450 Oracle Database 701 Tabellen exportieren 708 nextFrame 365 ORDER BY 712 Tabellen importieren 709 NICHT 354 Ordner 152 mysql_connect 711, 720 NONE 481, 482 Out-Punkt 589

Index | 887 override 477 php.ini 778 Positionierung via CSS 315 overSkin 515 serverseitiges Datum und Zeit Positionsbasierte Kollisionser­ Overwrite 433 682 kennung 796 Sicherheit 697 POST 686, 778 P Sprachelemente und Syntax 672 PostgreSQL 701 p 624, 650 Stringverkettung 673 Postleitzahl 665 package 449 switch 674 post_max_size 778 paddingBottom 654 Upload 767 pow 427 paddingLeft 654 Variablen 672 preg_replace 698 paddingRight 654 Verzeichnis auslesen 779 Preloader 313, 382, 383, 763, 774, paddingTop 654 Voraussetzungen 668 860 Paket-Pfad 449, 453 while 674 Preloader-SWF 616 pan 575 phpinfo 668 prependChild 742 Papervision 3D 849 phpMyAdmin 703 prevFrame 365 ParagraphElement 655 PHP und MySQL 710 private 461 paragraphEndIndent 654 Pi 413, 428 Private Browsing 802 paragraphSpaceAfter 654 Pinselmodus 80 Privater Modus 802 paragraphSpaceBefore 654 Pinsel-Werkzeug 79 PROGRESS 384, 561, 574, 762, 769 paragraphStartIndent 654 Füllfarbe 79 ProgressEvent.PROGRESS 384, parameter 607 Glätten 79 561, 574, 762, 769 Parameter 361, 606 Pipette 114 Progressiver Download 562, 581 Standardwerte 363 Pixel auslesen 538 Projekt-Fenster 457 unbekannte Anzahl 363 Pixelbasierte Kollisionserkennung protected 461 parent 364, 367 792 ProTools 550 Partikelsystem 84, 91 Pixelfont 266 Proxy 737 Passwort 619 Positionierung 268 public 451, 460 Passwortschutz 859 Regeln 267 Punktsyntax 502 pause 603 Schriftgröße 267 push 344 PDA 839 Textausrichtung 267 Pythagoras 414 Perian 585 Textauszeichnung 267 Python 667 Perl 667 Wann Sie verzichten sollten 268 Pfad 178, 528 Pixelgrafik 31 Q Ankerpunkte entfernen 101 pixelHinting 481 Quad 434 Ankerpunkte hinzufügen 101 Pixel setzen 540 Quadratwurzel 428 Bewegungs-Tween 178 pixelSnapping 536 Qualität 549 schließen 98, 101 PixelSnapping.ALWAYS 537 Quart 434 Pfad Umformung 179 PixelSnapping.AUTO 537 Quellpfad 459 Photoshop-Import 522 PixelSnapping.NEVER 536 Filmbasiert 459 PHP Pixel und Vektoren 31 Global 459 Daten senden 677 play 559, 573, 603, 806 Quickfixes 846 Daten senden und empfangen Plugin Switcher 856 QuickTime 583 684 PNG 382, 519 Quick-View-Outline 847 Datentypen 673 PNG-Export 300 Quint 434 Datums- und Zeitfunktion 675 Polygon 99 Fallentscheidung 673 Polysternwerkzeug 99 R for 675 pop 344 RADIAL 495 foreach 675 Popup-Fenster 856 Radialer Farbverlauf 116 Funktionen 675 Ports 672 Radiant 413 Gästebuch 715 Pose einfügen 237 Radiergummi 94 if 673 Posenanimation 240 Form 94 Kontakformular 689 Posenebene 231 Größe 94 Operatoren 673 position 566, 574 RadioButton 504

888 | Index random 427 resume 603 einfügen 156 Rankenfüllung 83, 84 RETURNINDEXEDARRAY 346 kopieren 158, 164 Raster 125 reverse 344, 435 leer 156 bearbeiten 125 Rhino 3D 850 löschen 156, 165 einblenden 101 RIA 833 Posenebene 235 Rasterfüllung 83, 85 rightmargin 625 verschieben 158 Rastergrafik 32 rightMargin 642 Schneeflockensimulation 442 Rasterlinie verschieben 120 rightPeak 574 Schreibregeln 270 Ratios 495 rightToLeft 575 Schrift Rauchanimation 84, 92 rightToRight 575 Geräteschriften maskieren 260 RAW 548 ROLL_OUT 380, 789 Darstellung 256 readdir 779 ROLL_OVER 380, 789 eingebettete Schriften 263 readFloat 579 root 364 Feintuning 264 REAL 706 rotation 367, 397 Geräteschriftarten 258 Rechteck Rotation 210, 413 Pixelfonts 266 mit abgerundeten Ecken 493 Bildebene 210 Schriftarteinbettung 643 ohne Außenlinie 95 im Raum 210 Schriftart-Klasse 642 zeichnen 488 rotationX 367, 398 Schriftart-Symbol 642 Rechteckgrundform 96 rotationY 367, 398 Schriftfarbe 249 Rechteckwerkzeug 95 rotationZ 367, 398 Schriftgröße 248, 642 Rechter Kanal 554 round 428 Schrifttypen TLF-Text 275 Rechtschreibprüfung 272 ROUND 482 Schriftwarnung 269 Rechtwinkliges Dreieck 414 RSS 733 Schriftzeichen in Vektoren Red5 582 RSS-Feed lesen 734 umwandeln 264 Refactoring 844, 847 RTMP 582 Schriftzuordnung 269 RegEx 661 Ruby 667 Schwarze Ränder 587 RegexBuddy 664 Rückgabewert 361, 362, 449, 453 Schwingende Bewegung 415 register_globals 685 Runtime Shared Library 616 Schwingung 415 Registrierung eines MovieClips Screenreader 321 ändern 136 S Screensaver 847 Registrierungspunkt 135 Samplingrate 548, 576 Screensaver Producer 848 Reguläre Ausdrücke 661 Samplingtiefe 546, 548 ScreenTime for Flash 848 Beispiele 663 Sandbox 863 Scroller 646 Methoden 661 Sandy 3D 849 Scrollrad (Mac) 859 Text ersetzen 662 sans 258 scrollRect 441 Reihenfolge Ebene 151 Sättigung 531 scrollTargetName 648 Rekursive Funktionen 363 save 761, 768 SDK 836 Remote-Debug 391 scaleMode 481 SecureSWF 856 Remote-Debugging 292 scaleX 367, 397 Security by obscurity 826 removeAll 755 scaleY 367, 397 SECURITY_ERROR 677, 768, 770 removeChild 372 scaleZ 367, 397 SecurityErrorEvent.SECURITY_ removeChildAt 372 Schaltfläche 136 ERROR 768, 770 REMOVED_FROM_STAGE 381 Aktiv 137 Security.sandboxType 856 removeEventListener 378, 501, Auf 137 seek 603 786 Darüber 137 Segmentraster 118 removeTint 441 erstellen 137 Sekunde 468 Rename 844 Gedrückt 137 SELECT 712, 758, 765, 770 repeat 485 Schlagschatten 531 selectable 640 replace 662 Schleifen 356, 552 selected 504 replaceText 646 Leistungsvergleich 358 send 857 restrict 640 Schlüsselbild 155 Sequenzen 432 Restwert 348 Darstellungsweise 157 serif 258

Index | 889 Serifen 259 Slideshow 503 span 651 Server Adminstration 702 SlowMotion 816 SpanElement 656 Serverseitige Skriptsprache 667 SMALLINT 706 Speicher freigeben 379 SET 726 Smartphone 839 Spieleprogrammierung setChildIndex 373 smooth 485 Highscore 819 setComponentStyle 512 smoothing 537 Highscore-Sicherheit 826 setPixel 540 SOL 802 Interaktion 785 setPixel32 541 Sonderzeichen 633 Kollisionserkennung 789 setPixels 541 songName 560 SharedObject 801 setSelection 646 sort 344, 345 Sound 806 setSize 441, 500, 736 Sortierung 345, 745, 854 Zeit 799 setStyle 511 absteigend 346 Spiralenförmige Bewegung 423 Setter 472 absteigend 345 splice 344 setTextFormat 641, 646 alphabetisch 346 split 781 setVector 541 numerisch 345 Sprache 549 SGML 668 sortOn 344, 345, 346, 746, 854 Sprühen-Werkzeug 81 SHA1 827 sortXMLByNode 745 Sprite 338, 368 SHA256 827 Sothink SWF Decompiler 855 SQL 702 ShaderFilter 534 Sound 545 SQL Development 702 Shape 338, 368 abspielen 561 SQL Distinct 713 shapeFlag 791 ein- und ausblenden 555 SQL-INJECTION 720 Shared Library 144 Ereignis 551 SQL-Injections 725 Dateigröße 147 Import 547 sqrt 415, 428 Ladeverhalten 146 in der Zeitleiste 551 SQRT1_2 428 SharedObject 801 laden 559 SQRT2 428 shift 344 Lautstärke 568 SQUARE 482 shortRotation 441 Lautstärke steuern 569 SSL 698, 826 Sicherheit 697, 723, 771, 826, 855, mit ActionScript 557 stage 368 858, 859, 863 parallel steuern 564 Stage 365, 368 Sicherheits-Sandbox 863 pausieren 566 Standard 705 Sichtbarkeit von Anzeigeobjekten Schaltfläche 552 Standard-Komponenten 839 373 Starten 551 Standardlayout wiederherstellen Silbentrennung 252 Stopp 552 61 SimpleButton 369 Stream 552 Stapelreihenfolge 121 sin 428 Veröffentlichung 547 start 403 Sine 434 SoundChannel 561, 566 startDrag 787 Sinus 415 SOUND_COMPLETE 562, 575 Starten 551 size 512, 642, 770, 802 Soundeffekte 554 static 462 Skalierbarkeit 31 Soundeigenschaften 549 Statische Textfelder 247 Skalierung 209 Sound Forge 550 Statusübergänge 839 animieren 209 Soundkanal 575 Sternform erstellen 99 Skelett SoundLoaderContext 562 Steuerung der Zeitleiste 365 Animation 234 Soundloop 552, 561 Steuerungspunkte ausrichten 242 Hierarchie 233 als MP3 563 Steuerung von Zeitleisten 364 Skinning 498 SoundMixer 558, 575 Stift 100 Skins 510, 512 Sound-Player 573 Stiftwerkzeug Skript-Höchstzeit 292, 357 Soundspektrum 548, 575 Ankerpunkte entfernen 101 Skripthilfe 330 darstellen 576 Ankerpunkte hinzufügen 101 aktivieren/deaktivieren 333 Sound-Streaming 562 Ankerpunkte umwandeln 101 Skype 672 soundTransform 574, 602, 605 Pfad schließen 101 slice 344 SoundTransform 559, 568 Stile 510, 511 Slider 569 Soundtypen 551 stop 364, 365, 403, 574

890 | Index stopAll 558 SWFObject 295, 301 T stopDrag 788 align 312 tab 651 Stopp 552 Einbindungsmethode 295 Tabellen exportieren 708 Stream 552 FlashVars 305 tabIndex 628, 639 Streaming 563, 582 menu 311 Tablet-PC 839 stretchFaktor 576 quality 311 tabstops 625 Stricheigenschaften scale 312 Tabulator-Reihenfolge 628 Benutzerdefinierte Stile 76 weitere Einstellungen 303 tan 428 Farbe 76 wmode 312 Tangens 428 Höhe 76 SWF Protector 856 target 377, 642 Stil 76 SWF-Schutz 855 Tastatur 369, 381, 785 Strichfarbe 70, 76 SWF Screensaver for Mac 848 Tastaturbefehle deaktivieren 785, Strichhöhe 76 SWF-Verlauf 43 865 Strichlinie 850 Tastaturkurzbefehle 63 Abschluss 77 switch 351, 674 definieren 65 begradigen 102 Symbol-Bearbeitungsmodus 128 Menü 64 entfernen 102 Symbole 127 Standard wiederherstellen 66 glätten 102 als Klasse 467 Tastatursteuerung 785 in Füllung umwandeln 75, 76 an Position bearbeiten 132 Tate Chu Yoko 617 Verbindung 77 bearbeiten 132 tcy 651 Strichstil 76 Begrenzungsrahmen 134 Teilen 264 benutzerdefiniert 76 duplizieren 133 Telefonnummer 665 Strikte Typisierung 339 erstellen 128 Tellerrand 833 String 338 Grafik-Symbole 127 test 661 strip_slashes 724 Instanzeigenschaften 127, 131 Testen 550 strip_tags 699 Instanzen 130 text 622, 639 Stärke des Weichzeichners 590 in Symbol konvertieren 129 Text 243 Strong 434 konvertieren 129 als Grafik einfügen 265 Struktur der Zeitleiste im XFL-For- MovieClip-Symbole 127 Anti-Aliasing 257 mat 324 Positionierung 134 Ausrichtung 251 Strukturierung von Ebenen 152 Registrierung 129, 135 auswählbar 256 Stunde 468 Registrierung ändern 136 Auszeichnungen 249 StyleManager 512 Schaltflächen-Symbole 128 Bitmap-Text 264 subclass 475 Schriftart-Symbole 128 Blocksatz 252 Subject 698 Verschachtelung 127 Breite anpassen 244 Subtrahieren 531 Symbolinstanz 130 Dokument laden 631 Subtraktion 348 Symboltyp 594 dynamische Textfelder 617 Suchen 333 Symmetriepinsel 83, 86 dynamisch zuweisen/abfragen Suchen und Ersetzen 333, 709 Synchronisation 551 622 Suchmaschinen 303 Syntax überprüfen 333, 334 Eigenschaften 246 super 477 Syntax-ToolTip 844 Eingabe beenden 244 superglobale Arrays 701 System.useCodePage 632 Eingabefokus 629 Superklasse 475 Szenen 158 Eingabetextfelder 617 swapChildren 373 ansteuern 160 eingebettete Zeichen 265 SWC-Dateien 290 Bildbezeichner 159 E-Mail-Verknüpfung 255 SWD-Dateien 291 Dateigröße 159 Farbe 248 SWF 382 duplizieren 158 fehlende Schriften ersetzen 269 SWF-Decompiler 855 erstellen 158 Feld-Eigenschaften 637 SWF-Einbindungsmöglichkeiten vermeiden 159 Felder mit ActionScript 637 295 verwalten 158 feste Breite 243 SWF-Einstellungen 289 Vor- und Nachteile 159 Fettdruck 250 SWF laden 382 Fluss steuern 649

Index | 891 formatieren 247 Text-Container 656 TimerEvent.TIMER 403 Größe 248 textDecoration 655 TIMESTAMP 706 hoch-/tiefstellen 254 Textebenen 524, 527 Timing 202 HTML-Formatierungen 624 Texteingabefelder 247 tint 441 HTML-Textfelder mit eingebetter Textfeld-Eigenschaften 246, 637 Tintenfass 113 Schrift 623 Textfeld-Methoden 645 TINYINT 706 Kapitälchen 250 Textfeld-Typen 246 TINYTEXT 706 Kontrast 249 dynamisch 247 TLF-ActionScript-Bibliothek 616 Kursiv 250 Eingabefelder 247 TLF-Text 273 laden 758 statisch 247 ausrichten 279, 280 linksbündig 251 TextField 338, 369, 637 auswählbar 274 mehrspaltig 657 TextFieldAutoSize.CENTER 638 bearbeitbar 274 mehrzeilig 243 TextFieldAutoSize.LEFT 638 Container und Fluss 280 mit Anti-Aliasing 263 TextFieldAutoSize.NONE 638 Dateigröße 273 mittig 251 TextFieldAutoSize.RIGHT 638 Eigenschaften 274 mit URL verknüpfen 254 TextFieldType.DYNAMIC 640 formatieren 275 Neigung 246 TextFieldType.INPUT 640 Formatierungseinstellungen 274 ohne Anti-Aliasing 264 textflow 650 Groß-/Kleinschreibung 275 Rahmen 619 TextFlow 650, 655 Grundlinienverschiebung 279 rechtsbündig 251 textformat 625 Hyperlink und Ziel 275 Rechtschreibprüfung 272 TextFormat 640 Ligaturen 276 reguläre Ausdrücke 661 Eigenschaften 642 nur Lesen 274 Richtung 254 TextFormatAlign.CENTER 642 Schrifttypen 275 Rotation 245 TextFormatAlign.JUSTIFY 642 Textfelder verbinden 282 Schriftart 248 TextFormatAlign.LEFT 642 Umbruch 277 Schriftart-Klasse 642 TextFormatAlign.RIGHT 642 Veröffentlichungseinstellungen Schriftart-Symbol 642 textHeight 639 273 Schriftfarbe 249 textIndent 655 vs. klassischer Text 273 Schriftgröße 248 Textknoten 741 Ziffernbreite 276 Scroller 646 TextLayoutFormat 651 Ziffernschreibweise 276 Skalierung 245 Text Layout Framework 649 TLF-Texterstellung 273 Tabulator 628 Eigenschaften 652 TLF-Textfeld-Eigenschaften Textfeld-Methoden 645 mehrspaltiger Text 657 Ausrichtung im Container 281 Textfeld-Typen 246 Vererbung 652 Maximale Zeichen 281 TextFormat-Klasse 640 Textrichtung 254 Spalten 281 Text Layout Framework (TLF) 649 textRotation 655 Textfarbe 282 transformieren 245 Textscroller 646 Verhalten 281 unerwünschte Schatten 266 Text transformieren Zellauffüllung 282 URL-Kodierung 633 Neigung 246 TLF-Textfelder miteinander Zeichenabstand 253 Rotation 245 verbinden 282 Zeicheneinbettung 620 Skalierung 245 TLFTextField 637 Zeichenkodierung 631 textWidth 639 TLS 698 Zeilenabstand 252 Third Party Tools 842 to 432 Zeilenlänge 253 RegEx 664 To 698 zentriert 251 Tiefenverwaltung 418 togglePause 603 TEXT 678, 706 TIFF 519 toString 344 textAlign 654 TileList 504 track 560 textAlignLast 654 time 605, 606, 778 trackingLeft 655 textAlpha 655 TIME 706 trackingRight 655 Textausrichtung TLF-Text 280 Timer 403, 470 Transformationsmatrix 495 Textbreite 244 TIMER 403 Transformieren, Text 245 textColor 639 TimerEvent 471 transformMatrix 441

892 | Index Transparenz 70, 211 U URLLoaderDataFormat.VARIABLES Trigonometrie 412 u 624 678, 714 true 338 Überlagern 530 URLRequest 382, 632, 695 TrueSpace 850 Überschreiben 477 URLRequestMethod.GET 687 try 813 Übersichtlichkeit 454 URLVariables 687 Tween 429 Überspringen 391 URL verknüpfen mit Text 254 animieren 173 UILoader 504 useCodePage 632 an Pfad ausrichten 198 uint 338 UTF-8 680, 870, 871, 872 Beschleunigung 178, 208 UIScrollBar 646 utf8_decode 680 Bewegungs-Editor 184 ul 624 utf8_encode 680 Bewegungspfad 201 Ultrashock 498 Bewegungs-Tween 172 Umbruch TLF-Text 277 V Bewegungs-Tween erstellen 172 Umkehren 531 Validierung 731 Bewegungsvorstellungen 195 Umlaute 633 VARCHAR 706 Drehung 178 sortieren 854 Variablen 336, 672 eigenen Pfad erstellen 183 Umwandlung, Bitmap in Vektoren Variablendefinition 466 Eigenschaften 177 214 doppelte 395 erstellen 175 UND 353 Variablenzugriff aus Flash 305 Formmarken 216 undefined 337, 394 VARIABLES 678 Form-Tween 212 underline 512, 642 VBR, 2-Pass 591 Geschwindigkeit 180 Ungleich 350 VBScript 667 Instanzname 177 Unicode 631 Vector 347 klassische Tweens 172 UniRed 632 Vektoren und Pixel 31 klassische vs. Bewegungs-Tweens UNIX-Dateirechte 686 Vektorgrafik 31 174 Unix-Zeitstempel 778 Vektorkonturen 524 Länge ändern 181 UNLOAD 384 Verbindungswinkel 482 Optionen 177 unshift 344 Vererbung 474, 652 Pfad 178 UNSIGNED 705 Veröffentlichen verlängern 176 Unsigned Integer 338 ActionScript-Version 288 Tween-Engines 428 Unterauswahl-Werkzeug 103 Bilder und Sounds 288 Tweener 429 Unterklasse 475 Ebenen ignorieren 154 TweenEvent.MOTION_START 429 Unterschneidung 252, 642 Flash 286 Tween-Klassen 428 Unterstreichung 642, 655 Flash-Player-Version feststellen 294 TweenLite 429, 430 Untypisiert 337 GIF 297 3D-Flip 435 UPDATE 726 Hardwarebeschleunigung 292 Easing 433 updateAfterEvent 401, 487 HTML 293 Ereignisse 434 updateAllControllers 657 HTML-Ausrichtung 296, 312 Methoden 430 upload 767, 768 JPEG 299 Plugins 438 Upload 765 mit und ohne JavaScript 295 Schneeflockenanimation 442 UPLOAD_COMPLETE_DATA 770 PNG 300 TweenMax 429 Upload-Fortschritt 774 Skalierung 312 TweenNano 429 upload_max_filesize 777 SWF-Einbindungsmöglichkeiten TweenPlugin 438 Upload-Skript 767 295 Tweens 172 url 573, 642 SWF-Einstellungen 289 Bewegung im Raum 209 urlencode 679 SWFObject 295 Tweensy 430 URL-Encoding 679 Version 286 Typ 705 URL-Kodierung 633, 873 vor Import schützen 291 type 606, 640, 770 URLLoader 632, 678, 684, 729 Veröffentlichungseinstellungen Typenkonflikt 340 URLLoaderDataFormat 633, 636 TLF-Text 273 typeof 340 URLLoaderDataFormat.BINARY verwenden 521 typewriter 258 678 Vergleichsoperatoren 349, 350 Typisierung 339 URLLoaderDataFormat.TEXT 678 Vergrößern 122

Index | 893 Verkleinern 122 W bearbeiten 741 Verknüpfung 548, 644 W3C 297 Definition 727 Verknüpfungsbezeichner 142 W3C-konforme Veröffentlichung Elemente entfernen 743 Verlassen 391 295 Elemente hinzufügen 741 Verlaufsmasken 220 W3C Validator 297 Formatierungen 738 Beispiel 220 Wasserhahn 94 Kommentare 731 Maskierung 223 WAV 547 laden 729 Verlustbehaftet 519 Wavelab 550 sortieren 745 Verlustfrei (PNG/GIF) 519, 520 Webkit-Engine 835 Sortierung (nach Attribut) 747 Verschachtelung 166, 224 Webserver 668, 669 speichern 748 Beispiel 224 Weichzeichnen 531 XMLList 733 Verschleierungstechnik 831 Werkzeuge XML-Parser 729 Verschlüsselung 698, 827 3D-Drehungswerkzeug 109 XMP 591 VERTICAL 481 3D-Versetzungswerkzeug 110 XOR 354 verticalAlign 655 Deko 83 Vertikale Textrichtung 254 Sprühen 81 Y Verzögerung und Bildrate 403 Werkzeugleiste 51, 329 y 367, 368, 397, 637 Video 369, 597 Darstellung 52 Yahoo Astra Components 498 Audio 592 ein-/ausblenden 333 year 560 Audio-Export 589 Wasserhahn 94 YEAR 706 Audio-Spur steuern 602 WHERE 712, 726 Yudit 632 über ActionScript abspielen 599 while 356, 674 Beschnitt 587 whiteSpaceCollapse 655 Z Export 586 width 367, 397, 637 z 367, 368, 397, 637 extern 597 Wiederherstellung 855 z-Achse 418 FLV in der Zeitleiste 594 Wiederholungen 552 Zauberstab 105 Import in Flash 592 willTrigger 379 Einstellungen 105 Kodierung 585 Windows Media-Datei 583 Zeichenabstand 252 Metadaten 591 Winkel 413, 424 Zeicheneinbettung 620 Vollbild 601 Winkelberechnung 424 Zeichenkette 338 Vorlagen 586 Wireframe 839 Zeichenkodierung 631, 680 Zeitleiste 588 Wireshark 688 Zeichenmodi, Objektzeichnung 70 Video-Containerformat 584 wmode 312 Zeichentabelle 870, 871, 872 Video for Flash 583 Wohlgeformtheit 729, 730 Zeichentablett 79 Videoformate 583 wordWrap 640 Zeichenwerkzeuge 70 Flash-Player-Versionen 584 World Wide Web Consortium 297 Ankerpunkt entfernen 104 Video-Größe 586 Wowza Media Server 582 Auswahl-Werkzeug 102 Video importieren 592 Eigenschaften ändern 75 Video-Objekt 597 X Ellipsenwerkzeug 97 Video-Playback-Komponente 593 x 367, 368, 397, 637 Farbeimerwerkzeug 113 Video-Player 584 XAMPP 668 Farbverlaufwerkzeug 117 Video-Streaming 582 Control-Panel 670 Freihandwerkzeug 78 visible 368, 438, 441, 640 installieren 669 Lassowerkzeug 104 VLC Media Player 585 XARA 3D 850 Linienwerkzeug 74 void 361 XFL-Datei 322 Pinsel-Werkzeug 79 Vollbild 601 Grafiken aktualisieren 323 Pipette 114 volume 442, 568, 575, 602 speichern 322, 323 Polysternwerkzeug 99 Voreinstellungen Struktur der Zeitleiste 324 Radiergummi 94 Tween Bewegung 195 Vorteile 323 Rechteckwerkzeug 95 Vorgabe 586 Wirksamwerden von Änderungen Stiftwerkzeug 100 Vorverarbeitung 549 323 Stricheigenschaften 75 vspace 624 XML 658, 727, 820 Strich- und Füllfarbe 70

894 | Index Tintenfasswerkzeug 113 Zeilenumbruch 651 Ziffernschreibweise TLF-Text 276 Unterauswahl-Werkzeug 103 Zeit 675, 799 ZINC 848 Werkzeug für Ellipsengrundform Zeitleiste 54, 149 Zoom 77 98 bei Bedarf erweitern 595 Zufall 427 Werkzeug für Rechteckgrundform Bildbezeichner 159 Zugänglichkeit 321 96 Bilder 155 Zwiebelschaleneffekt 170 Zeichnungs-API 479 Darstellungsoptionen 157 aktivieren 170 Zeilenabstand 252 Steuerung 364 Anwendungsbereich 170 Zeilenfall 251 Zeitleistensteuerung 365 Konturansicht 171 Zeilenkommentar anwenden 333 Zeitstempel 681, 820 mehrere Bilder bearbeiten 171 Zeilenlänge 252 Zellauffüllung TLF-Text 282 verankern 170 Richtwert 253 Zielpfad einfügen 333 Zwischen Klammern ausblenden Zeilentyp 618 Ziffernbreite TLF-Text 276 333

Index | 895