Letzte Änderung: 20 Oktober, 2010

 

paypal
Unterstützen sie meine Arbeit ?

 
pastorpixel startseite Homepage Deutschland Webdesign Portal  
Grundlagen Flash MX basic Grundlagen Flash 5 oder tiefer Tastenkombinationen

Creative Commons License
Dieses Werk oder Inhalt ist unter einer Creative Commons-Lizenz lizenziert.

buchtipps Actionscript 3

Flash Actionscript 3

Hier gibt es viele Flash Actionscript 3 Beispiele und Tutorials. Diese Page wird mit der Erweiterung meines Wissenstandes erweitert. Auch auf der AS2 Seite befinden sich Links zu den entsprechenden AS3 Themen, sofern sie vorhanden sind.
Ich empfehle die Livedocs von Adobe zum Studium. Diese Seite dient vorab nur als Ergänzung mit vielen einfachen Beispielen zu den Referenzen und dem Programmierhandbuch von Adobe.
Ich arbeite als freischaffender Webdesigner, denken Sie an mich, wenn ein Auftrag zu vergeben ist. Tel: 0231 20 24 93 mail@pastorpixel.de

Eine weitere Einstiegshilfe sind die Videoworkshops von Adobe. Wähle dort das Programm Flash und das Thema Actionscript 3.


Unter Datei / Einstellungen für Veröffentlichung, Karteireiter Flash, definiert man die Programmiersprache AS1, AS2, AS3

In Actionscript 3 ist alles ein bischen strenger. In Actionscript 3 wurden einige wesentliche Dinge geändert. Hier ist in erster Linie das Eventhandling und die Display Liste zu nennen. Vieles, was man von Actionscript 1 und 2 kennt, gibt es nicht mehr, vieles ist hinzugekommen, aber vieles ist auch nicht viel anders als in AS2. Einer der Vorteile von Actionscript 3 ist eine erhöhte Ausführungsgeschwindigkeit. Ein weiterer Vorteil, den vor allen Dingen erfahrene Programmierer zu schätzen wissen, ist der ECMA Standard. Außerdem lassen sich komplexe Projekte durch die Objektorientierung einfacher in den Griff bekommen.

Wenn man Anfänger ist, sollte man vielleicht gleich mit Actionscript 3 anfangen. Es kommt aber auch drauf an, was man vorhat, wenn man in erster Linie als Grafiker arbeitet und nur ein paar Aktionen für Menüs oder die Zeitleiste programmieren will, ist man mit AS1 und AS2 vielleicht besser bedient, aber das muss jeder selbst entscheiden.

Den Umsteigern empfehle ich, sich zuerst mit der objetkorientierten Programmierung zu beschäftigen. Das Thema Klassen oder die objektorientierte Programmierung. OOP sollte an erster Stelle stehen, vor allen Dingen dann, wenn man es in AS2 noch nicht benutzt hat. Das große Problem, dass ich und viele Umsteiger haben ist, dass man die Dinge nicht mehr so programmiert wie in AS2. Das Eventhandling und auch die Displayliste erfordert ein völlig anderes Herangehen an die Sache, man muss umdenken und sollte nicht versuchen, die Dinge genauso zu programmieren wie in AS2.

Hat man das OOP Thema, die EventListener und die Display Liste verstanden, ist alles andere nicht mehr so schwierig. Man könnte sogar sagen, es ist einiges einfacher, aber vor allen Dingen übersichtlicher geworden.

 

Einige Neuerungen in Actionscript 3

1 Einstieg

1 Tutorials

Objektorientiertes Programmieren/ Klassen
Ereignis Objekt / Eventlistener / Events
Objekte / Variablen / Datentypen / Strikte Typisierung
Funktionen

Zeitleiste / Bildbezeichnungen
Zeitleisten von MCs synchronisieren

MovieClips / Eigenschaften
addChild() / Display Object / Movieclips dynamisch erzeugen
Loader Object / SWF Dateien laden
Graphiken dynamisch / Shape / lineTo /
Textfelder / Textflied / Textformat

programmierte Bewegung / Tastatursteuerung
flashvars neue Seite
fullscreen / stage / Bühnengröße neue Seite
sound
XML neue Seite
Timer Event neueSeite
globalToLocal, xmouse, mouseX
getBounds() / getRect()
Point
Point / Point.interpolate()
Point.subtract()
Point.polar()
hitTest Kollisionserkennung
color / Farbe / ColorTransform
BitmapData Pixel- Manipulationen Flash Inhalte Speichern
printJob
Komponenten
3D mit Papervision3D

Tutorial Drop Down Menü
Tutorial Transform Tool
Koordinatentransformation

Bones Videotutorial

 

Objektorientiertes Programmieren

Jede von Ihnen deklarierte Variable, jede von Ihnen geschriebene Funktion und jede von Ihnen erstellte Klasseninstanz ist ein Objekt. Man kann sich ein ActionScript 3.0-Programm als eine Gruppe von Objekten vorstellen, die Aufgaben ausführen, auf Ereignisse reagieren und miteinander kommunizieren.

In ActionScript 3.0 wird jedes Objekt durch eine Klasse definiert. Eine Klasse kann man sich als Vorlage oder Entwurf für den Typ eines Objekts vorstellen. Jeder der ein bischen mit Flash gearbeitet hat, kennt das Prinzip schon. Der Movieclip (in der Bibliothek) ist die Klasse, die Instanz auf der Bühne ist das Objekt, welches Eigenschaften (z.B.: xPosition) und Methoden besitzt ( z.B.: gotoAndStop(2));

Bei der objektorientierten Programmierung in ActionScript weist jede Klasse drei Merkmale auf:

Auch das kennt man schon, so besitzt ein Movieclip unter anderem die Eigenschaft xPosition, die Methode play() und das Ereignis EnterFrame.

Eine Klasseninstanz erstellen Sie mit dem Operator new. z.B.:
var myBirthday:Date = new Date();

Klassen definieren siehe Livedocs

swf SWF Beispiel Klassen

weiterführende Themen bei Adobe

weiterführende Themen hier, Display Objects/ MovieClips

package mypackage {

public class MyClass {

public var textVariable:String = "some default value";
public var numericVariable:Number = 17;
public var dateVariable:Date;
public function myMethod(param1:String, param2:Number):void
{
// Aktion mit Parametern ausführen
}

public function MyClass() {

// Aktionen zum Festlegen der Startwerte der Eigenschaften ausführen

// und andernfalls das Objekt einrichten

textVariable = "Hello there!";

dateVariable = new Date(2001, 5, 11);

}

}

}

Es gibt verschiedene Arten Klassenbibliotheken einzubinden.

Gehe auf Datei / Einstellungen für Veröffentlichung, dann auf Flash, Scripts, Einstellungen, wähle Karteireiter "Quellpfad" um einen Ordner mit Klassendateien einzubinden, oder "Bibliothekspfad" um eine swc Datei einzubinden. Das ist eine Datei, die alle Klassendateien beiinhaltet.

Es macht Sinn sich alle wichtigen Klassendateien, die man öfter benutzt (beispielsweise papervision) in einen Ordner zu packen, der alle wichtigen Klassen enthält.
Klicke auf Bearbeiten, Voreinstellungen, Actionscript, Actionscript3 Einstellungen und gebe unter "Quellpfad" den neuen Pfad zu diesen as Klassendateien an.

 

 

Ereignis Objekt

Ereignisse werden mit Listenern überwacht und ausgeführt. Unnötig zu sagen, dass das Thema wichtig ist. In AS3 kann man eine Aktion nicht mehr direkt einer Schaltfläche oder einem MC zuweisen, indem man ihn anklickt und dann im Aktionenfenster die Aktion einträgt. Auch die alten Events wurden durch Event.Listener ersetzt. Dieses Thema in den

Adobe Referenzen.

Adobe AS3 Ereigenisverabeitung

swf SWF Beispiel eventObject.swf

siehe auch added to Stage / removed from Stage

Keyboard Events

Ereignisse mit Tastatursteuerung in meinem Tipp "programmierte Bewegung"

EventDispatcher

Wozu benötigt man eigentlich EventDispatcher? (dispatcher: Sender(Eselsbrücke Depeche)) Schauen wir uns dazu mal eine der UI Komponenten an. Wenn ich beispielsweise eine Funktion definiere, die auf dem onChange Ereignis einer Combobox ausgeführt wird, benutze ich dazu die mir zur Verfügung stehenden Event Listener (Listener: Hörer) und Ereignisse. Versuche mal selber so etwas mit einer Movieclipklasse und der dazugehörigen Klassendatei nachzubauen, dann kommst du an den Punkt wo du einen EventDispatcher brauchst. Innerhalb der Klasse hast du bestimmte Elemente, denen du von außen eine Funktion zu weisen willst. Von außen heißt in diesem Falle in der Umgebung, wo die Instanz der Klasse eingefügt wurde. Dazu nun folgendes Beispiel, eine eigens erstellte Klasse TextfeldMessage:

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen


package {
	import flash.display.MovieClip;
	import flash.display.DisplayObject;
	import flash.events.*;
	import flash.text.Font;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFieldAutoSize;
	import flash.text.AntiAliasType;
	import flash.text.TextFormatAlign;



	public class TextfeldMessage extends MovieClip {

		//-----------------------------------------------------------
		// TextfeldMessage-Ereigniss
		//
		public static const LISTITEM_CLICK:String="TextfeldMessageEvent_LISTITEM_CLICK";

		//------------------------------------------------------------------------
		//Variablen

		//Der ausgewählte TextString
		protected var selectedTextfieldText:String;

		//--------------------------------------------------------------------------



		//Konstruktor

		public function TextfeldMessage() {
			//Textfeld mit Text wird erzeugt und der Displayliste dieses Objekts hinzugefügt
			var lblText:TextField = new TextField();
			lblText.text="die Message";
			lblText.mouseEnabled=true;
			lblText.width=225;
			lblText.height=26;
			lblText.selectable=false;
			lblText.addEventListener(MouseEvent.CLICK, ListItemClick);
			addChild(lblText);
		}
		//Konstruktor Ende


		//-----------------------------------------------------------

		//getter Funktion ausgewählten Textstring zurückgeben
		public function get TextString():String {
			return selectedTextfieldText;
		}

		// Klick auf das Listen-Ereignis
		public function ListItemClick(evt:MouseEvent):void {
			selectedTextfieldText=evt.currentTarget.text;
			dispatchEvent(new Event(LISTITEM_CLICK));
		}

	}
}

Es folgt die Dokumentenklasse der fla in der das TextfeldMessage Objekt instanziiert ist.


package {
	import flash.display.MovieClip;
	import flash.events.Event;


	public class dispatchEventExample extends flash.display.MovieClip {


		//Konstruktor
		public function dispatchEventExample():void {

			//TextfeldMessage Instanz wird erzeugt und auf die Bühne gebracht
			var textMessageInstanz:TextfeldMessage = new TextfeldMessage();
			addChild(textMessageInstanz);
			textMessageInstanz.x=20;
			textMessageInstanz.y=10;

			//der Instanz wird ein Event Listener hinzugefügt
			textMessageInstanz.addEventListener(TextfeldMessage.LISTITEM_CLICK, showText);

			function showText(evt:Event):void {
				trace(textMessageInstanz.TextString);
				anzeige.text=textMessageInstanz.TextString;
			}

		}
		//Ende Konstruktor 
	}
}

Datentypen numerische Werte

number Fließkommazahl
int
positive und negative Ganzahlen
uint
positive Ganzzahlen
In Actionscript 1 und 2 gab es für numerische Wert nur number, welches eine Fließkommzahl definierte. In Actionscript 3 kommt int für ganzzahlige Werte ohne Komma und uint für positive ganzzahlige Werte hinzu.

Objekte Variablen

Deklaration
var meineVar:String;

Initialisierung
meine Var="der Text";

Deklaration und Initialisierung
var meineVar:String = "ein Text";

Kurzform für mehrere Variablen
Variablen, die sinngemäß zusammengehören, kann man auch folgendermaßen deklarieren:
var weite:Number, hoehe:Number;
Die Variablen werden mit Komma getrennt, Schlüsselwort var ist Pflicht
Auch eine Wertzuweisung ist möglich:
var weite:Number=20, hoehe:Number=39;

Variablen werden mit dem Schlüsselwort var deklariert. Die strikte Typisierung verlangt einen Datentyp. Wenn man noch keinen Wert bei der Deklaration zuweist wird der entsprechende Standardwert zugewiesen (siehe unten). In AS2 herrschte eine lose Typisierung, das heißt der Datentyp konnte sich ändern. Die strikte Typisierung hat den Vorteil einen erhöhten Verarbeitungsgeschwindigkeit, denn bei der Deklaration einer Variablen wird ihr ein bestimmter Speicherplatz zugewiesen, der je nach Datentyp unterschiedlich groß ausfällt.

swf SWF Beispiel var.swf

Auch in for-Schleifen einfach i=1 als Startwert angeben, ist nicht. Auch hier wird eine Variable mit dem Schlüsselwort var deklariert und der Datentyp angegeben.

for (var i:int=1; i<10; i++) {
outputText.appendText(i.toString()+"\n");
}

Dynamische Textfelder zeigen keine number Datentypen mehr an. Sie müssen vorher in Strings umgewandelt werden. Das kann man mit der Funktion toString() machen.

Neu hinzugekommen ist hier auch die Funktion appendText(), welche einen String an den vorhandenen String anhängt. In Actionscript 1 hätte man die gleiche Funktion so schreiben können.

for (i=1;i<8;i++) {
outputText.text+=i+"\n";
}

 

Hier noch eine andere Möglichkeit in AS3. Man sieht der + Operator verknüpft auch in AS3 Stings mit Number Datentypen. Heraus kommt ein String. Außerdem ist das + Zeichen der Plusoperator bei Zahlenwerten.

var meinText:String="";

for (var i:int=1; i<10; i++) {

meinText+=i+"\n";

} outputText.text=meinText;

 

 

Datentypen und Codehinweise

Beim Deklarieren einer Variablen mit strikter Typisierung muss der Datentyp zugewiesen werden.
Man kann Variablennamen suffixe anhängen, um Codehinweise zu erhalten:

Anhang / Endung Datentyp
_mc

MovieClip

_array Array
_str String
_btn Button
_txt TextField
_fmt TextFormat
_date Date
_pj PrintJob
_err Error
_cm ContextMenu
_cmi ContextMenuItem
_xml XML
_xmlnode XMLNode
_xmlsocket XMLSocket
_color Color
_cam Camera
_mic Microphone
_ns NetStream
_nc NetConnection
_so SharedObejct
_sound Sound
_video Video
_lc LocalConnection

Jeder Datentyp hat eine Klasse. Die Klassen findet man im Actionfenster unter: Oberste Ebene. Hier sieht man die Eigenschaften und Methoden der Klassen, die Änderungen ermöglichen.

Nach Datentyp überprüfen
is Operator
/ boolean

Mit dem is Operator kann man nicht nur den Datentyp überprüfen sondern auch ob der Datentyp eine Schnittstelle implementiert (Vererbung).

var myMc:MovieClip = new MovieClip();
if(myMc is MovieClip)trace("ist Movieclip");
if(myMc is DisplayObject)trace("ist auch Display Objekt");

Siehe Adobe Programmierhandbuch S.98. Strikter Modus

Codehinweise erweitern
Im Installationsverzeichnis von Flash die Datei:
de/first run/actionsPanel/actionscript_3/ActionsPanel_3.xm
sind diese Anhänge und Codehinweise hinterlegt. Zum Beispiel mit folgender Zeile:
<typeinfo pattern="*_mc" object="flash.display.MovieClip"/>
Diese Datei kann man erweitern, um Codehinweise anzuzeigen, die noch fehlen, beispielsweis für Boolean oder Number. Vorschlag: _boo für Boolean, _num für Number
<typeinfo pattern="*_boo" object="Boolean"/>
<typeinfo pattern="*_num" object="Number"/>

Datentyp feststellen
kann man mittels typeof()
trace(typeof(meinVar));

Wenn man abfragen will, ob eine Instanz einem bestimmten Datentyp zugehört:

if(myMovie is MovieClip){
Anweisung,
}

Standardwerte
Wenn einer Variable beim Initiieren kein Wert zugewiesen wurde, weist Flash einen Standardwert zu.
var meineVar:Number;

Bei Datentypen außer "Boolean", "Number", "int" und "uint" lautet der Standardwert einer nicht initialisierten Variablen null.

Datentyp Standardwert  
Boolean false  
Number NaN isNaN(meineVar)
int 0  
uint 0  
String null  
Array null  
Object null  
* undefined  

Für Variable des Typs Number gibt es eine besondere Funktion auf oberster Ebene namens isNaN(), die den booleschen Wert true zurückgibt, wenn die Variable keine Zahl ist, andernfalls gibt sie false zurück. Damit kann man somit auch überprüfen, ob eine Number-Variable initialisiert wurde.

 

Typumwandlung

siehe Adobe Hilfe

 

Funktionen

Zum Thema Funktionen siehe AS2 Tipps. Die Unterschiede zu AS3 werden im folgenden erklärt.
In AS3 bei strikter Typisierung, wird den Parametern der Datentyp zugewiesen:

function meineFunktion(para1:Number, para2:String){
Anweisungen;
}

Sofern die Funktion mittels return Rückgabewerte liefert, wird der Datentyp des Rückgabewertes hinter die runde Klammer gesetzt.

function meineFunktion ():Number{
Anweisung;
return numerischerWert;
}

 

void bedeutet, dass hier kein Rückgabewert geliefert wird, ansonsten wird der Datentyp des Rückgabewertes angegeben.

 

function meineFunktion ():void{
Anweisung;
}

 

Gültigkeitsbereiche

Variablen, die in einer Funktion deklariert wurden haben nur innerhalb der Funktion Gültigkeit. Variablen, die außerhalb einer Funktion deklariert wurden sind global und haben überall Gültigkeit. Der Compiler verschiebt Variablendeklarationen an den Anfang, aber nicht Wertzuweisungen in Variablen.

Wenn man eine globale Variable definiert und innerhalb der Funktion eine Variable gleichen Namens definiert. So existiert die globale Variable innerhalb der Funktion überhaupt nicht. In AS2 war das anders, da wurde die globale Variable erst überschrieben, wenn die lokale Variable erzeugt oder ihr ein Wert zugewiesen wurde. Folgende Beispiele verdeutlichen den Sachverhalt:

Actionscript Ausgabe Erklärung

var a:Number =10;
function myFunc (){
trace (a);
}

10 Die globale Variable a hat auch innerhalb der Funktion Gültigkeit.
function myFunc(){
var a:Number=20;
}
myFunc();
trace (a);
  die lokale Variable hat außerhalb der Funktion keine Gültigkeit.
var b:Number;
function myFunc(){
var a:Number=20;
b=a;
} myFunc();
trace (b);
20 Hier wurde der globalen Variablen b der Wert der lokalen Variablen a zugewiesen.

var a:Number =10;
function myFunc(){
trace(a);
var a:Number=20;
trace(a)
}
myFunc();
trace(a);

NaN
20
10

Die globale Variable a existiert in der Funktion überhaupt nicht, weil es innerhalb der Funktion eine lokale Variable gleichen Namens gibt.

Die erste trace-Anweisung gibt NaN aus (not a number),
die zweite zeigt den Wert der lokalen Variablen a
die dritte trace Anweisung befindet sich außerhalb der Funktion und zeigt der Wert der globalen Variablen a

 

Rekursive Funktion

Rekursiv bedeutet etwas ruft sich selbst auf. Hierzu sind zwar normalerweise die Schleifen da, aber es kann auch nützlich sein eine rekursive Funktion zu schreiben.

function meineSchleife(i:Number){
if(i<9){
trace(i);
meineSchleife(++i);
}
}
meineSchleife(1);

Wichitig ist hier die Zeile
meineSchleife(++i);
Wenn die Inkrement Anweisung vor der Variablen steht, gilt sie für die gesamte Anweisung. Sie wird also vor dem erneuten Funktionsaufruf um 1 erhöht.
Siehe hierzu das Thema AS2 / Variablen/ Inkrement Dekrement

Standardwert

Parameter in Funktionen kann man Standardwerte vergeben, allerdings dürfen nach einem Parameter mit Standardwert keine weiteren Parameter ohne Standardwert folgen:

function meineFunc(a:int, b:int=1, c:int=1, d:int=2){
return a+b+c+d;
}
meineFunc(10,10);

Hier kommt 23 raus, denn a=10, b=10, c=1, d=2
Bei c und d wurden die vordefinierten Standardwerte genommen. Man braucht also Parametern mit Standardwert beim Aufruf der Funktion keinen Wert zuweisen. Diese Parameter müssen logischerweise am Ende stehen, denn woher soll Flash sonst wissen, welchen Parameter man meint.

function meineFunc (a:int=1, b:int, c:int=10){
return a+b+c;
}

So geht das nicht, hier wurde ein Paramter ohne Standardwert nach einem Parameter mit Standardwert gesetzt. Das erzeugt gleich einen Compilerfehler.

Funktionen und Zufallswerte

Hier ein paar Beispiele mit Funktionen die Zufallswerte und zufällige Punkte innerhalb eines Rasters erzeugen.

swf SWF Beispiele

Zeitleiste / Bildbezeichnungen

Die gängisten Funktionen der Zeitleistensteuerung


stop();

next_btn.addEventListener(MouseEvent.CLICK, goNextFrame);
prev_btn.addEventListener(MouseEvent.CLICK, goPrevFrame);

nextScn_btn.addEventListener(MouseEvent.CLICK, goNextScn);
prevScn_btn.addEventListener(MouseEvent.CLICK, goPrevScn);

start_btn.addEventListener(MouseEvent.CLICK, goStart);

stop3_btn.addEventListener(MouseEvent.CLICK, goStop3);
play3_btn.addEventListener(MouseEvent.CLICK, goPlay3);



function goNextFrame(evt:MouseEvent):void{
nextFrame();
}

function goPrevFrame(evt:MouseEvent):void{
prevFrame();
}

function goNextScene(evt:MouseEvent):void{
nextScene();
}

function goPrevScene(evt:MouseEvent):void{
prevScene();
}

function goStart(evt:MouseEvent):void{
gotoAndStop(1, "Szene 1");
}

function goStop3(evt:MouseEvent):void{
gotoAndStop(3);
}

function goPlay3(evt:MouseEvent):void{
gotoAndPlay(3);
}

Bildbezeichnungen

Mithilfe der FrameLabel-Klasse von ActionScript 3.0 können Bildbezeichnungen im Code verwendet werden. Siehe die Referenz von Adobe

currentFrame:int  Die Nummer des aktuellen Bildes, anders ausgedrückt: das Bild, in dem sich der Abspielknopf gerade befindet.

currentFrameLabel:String Die Bezeichnung des aktuellen Bildes, wenn keine Bezeichnung vorhanden ist, wird Wert null zurückgegeben

currentLabel:String Die Bezeichnung des zuletzt gefundenen Bildes mit Bildbezeichnung, wenn nicht vorhanden wird Wert null zurückgegeben.

totalFrames:int Die Anzahl der Bilder in der Zeitleiste.

currentLabels:Array Ein Array mit allen Bildbezeichnungen. siehe unten

Beispiel

 

if (robot.currentLabel == "walking" { // Aktion ausführen }

Mit dem folgendem Code wird die Zeitleiste der Movieclipinstanz "girl" gesteuert. Der MC hat im ersten Bild die Bezeichnung "laufen" im letzten Bild die Bezeichnung "stehen". Im vorletzten Bild befindet sich die Aktion gotoAndPlay(1); Im letzten Bild steht das Mädchen in den Bildern davor befindet sich eine Laufschleife.

function stopNgo(event:MouseEvent):void {
if (girl.currentLabel=="stehen") {
girl.gotoAndPlay(1);
anzeige_mc.gotoAndStop(1);
} else {
girl.gotoAndStop("stehen");
anzeige_mc.gotoAndStop(2);
}
}

stopgobut.addEventListener(MouseEvent.MOUSE_UP, stopNgo);

 

In der stopNgo Funktion wird auch eine Movieclipinstanz anzeige_mc angesprochen, welche im ersten Bild das Stopzeichen und im zweiten Bild das Pfeil Zeichen hat. Da dieser MC über dem Button liegt und damit dieser MC nicht auch auf den Mauscursor reagiert, habe ich folgende Funktion hinzugefügt:

anzeige_mc.mouseEnabled=false;

Außerdem gibt es noch eine Funktion für die Bewegung des Hintergrundes, welcher hier eine MC Instanz namens strasse ist.

function bewegung(event:Event):void {
if (girl.currentLabel=="laufen") {
strasse.x-=10;
}
if (strasse.x<67) {
strasse.x=1488;
}
}
strasse.addEventListener(Event.ENTER_FRAME, bewegung);

 

Hier noch eine anderes Beispiel, wo die Zeitleiste rückwärts läuft

 

function timlineBackward(event:Event):void
{
if (bicycle.currentFrame == 1) {
bicycle.gotoAndStop(bicycle.totalFrames);
} else {
bicycle.prevFrame();
}
}
bicycle.addEventListener(Event.ENTER_FRAME, timlineBackward);

 


currentLabels:Array

currentLabel.name soll die Bildbezeichnung liefern
currentLabel.frame die Bildnummer
currentLabels (Mehrzahl) liefert ein Array mit allen Bildern (Adobe Referenz).

import flash.display.FrameLabel;

var labels:Array = meinMc.currentLabels;

for (var i:uint = 0; i < labels.length; i++) {

var label:FrameLabel = labels[i];

trace("frame " + label.frame + ": " + label.name);

}

 

Zeitleiste auf play und stop abfragen

Hier geht es darum, zu kontrollieren ob die Zeitleiste läuft oder nicht. Man überprüft also die Zeitleiste. Das mache ich, indem ich mit der Bildlaufrate abfrage ob das jetzige Bild dem vorigen Bild entspricht. Dazu habe ich eine Variable, namens bild, welche den Wert des jetzigen Bildes erst dann bekommt, nachdem man abgefragt hat, ob ihr Wert dem jetzigen Frame entspricht. Zu diesem Thema passt auch dieser Tipp. Dort werden alle Display Objects, die Movieclips sind gestoppt addChild/ alleDisplayObjekte abfragen

 

setInterval

Anstatt den Event Handler ENTER_FRAME zu benutzen kann man auch mit setInterval eine Anweisung in Schleife aufrufen. Die Parameter sind, die Funktion und die Zeitverzögerung in Millisekunden. Außerdem kann man danach noch weitere Parameter übergeben.

function keepOnTurning():void {
planet.rotation+=4;
}

var intervalV:uint = setInterval(keepOnTurning, 50);

Adobe Beispiel

function SetIntervalExample() {
var intervalId:uint = setInterval(myRepeatingFunction, intervalDuration, "Hello", "World");
}

function myRepeatingFunction():void {
trace(arguments[0] + " " + arguments[1]);
}

 

Framerate fps mit Actionscript AS3 ändern

Mit folgendem Befehl kann man die Framefrate fps (Bild pro Sekunde) per AS3 ändern.

this.stage.frameRate = 14;

So hat man die Möglichkeit einen Film schneller oder langsamer ablaufen zu lassen. Siehe dazu das Beispiel im nächsten Tipp.

Zeitleisten von MCs synchronisieren und Zeitleisten rückwärts laufen lassen

Die Zeitleiste rückwärts laufen zu lassen ist einfach, man ruft onEnterFrame das vorige Bild auf.

stage.addEventListener(Event.ENTER_FRAME, goPrevFrame);

function goPrevFrame(evt:Event):void {
gotoAndStop(currentFrame-1);
}

Wie kann man jedoch alle Zeitleisten rückwärts laufen lassen, also auch die Zeitleisten von MC Instanzen?

Hat man weitere MC-Instanzen eingefügt, die eigene Zeitleisten haben, hat man das Problem, dass diese Zeitleisten von hinten starten müssen. Abhilfe schafft man folgendermaßen. Man erstellt ein Symbol "Grafik" und fügt dort eine Animation ein. Man wählt die Instanz dieser Grafik auf der Bühne aus und wählt im Eigenschaftenfenster unter "Schleife" die Option "einmal abspielen" oder auch "Schleife", wenn die Zeitleiste mehrmals abspielen soll. In CS3 oder tiefer, stellt man diese Option direkt beim Erstellen der Grafik ein, oder man wählt das Kontextmenü der Grafik in der Bibliothek und stellt unter Eigenschaften die Option ein.

Im folgenden Beispiel ist die Pflanze eine "Grafik" mit Zeitleiste wie oben beschrieben. Auch die Blüten der Pflanze sind Instanzen von Gafiken mit eigener Zeitleiste für das Wachstum. Außerdem wird am Ende die Pflanze im Hauptfilm mittels Tweening unsichtbar gemacht. Das Tweening befindet sich im Hauptfilm.

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen


this.fast_btn.addEventListener(MouseEvent.MOUSE_DOWN,   fastFps);
this.fast_btn.addEventListener(MouseEvent.MOUSE_UP, slowFps);

this.back_btn.addEventListener(MouseEvent.MOUSE_DOWN, startBack);
this.back_btn.addEventListener(MouseEvent.MOUSE_UP, stopBack);


function fastFps(evt:MouseEvent):void {
this.stage.frameRate = 160;
}

function slowFps(evt:MouseEvent):void {
this.stage.frameRate = 14;
}


function startBack(evt:MouseEvent):void {
stage.frameRate = 16;
stage.addEventListener(Event.ENTER_FRAME, goPrevFrame);
}

function stopBack(evt:MouseEvent):void {
this.stage.frameRate = 14;
stage.removeEventListener(Event.ENTER_FRAME, goPrevFrame);
this.play();
}


function goPrevFrame(evt:Event):void {
gotoAndStop(currentFrame-1);
}

//--------------------------------------------------------


stage.addEventListener(Event.ENTER_FRAME, bildanzeige);

function bildanzeige(evt:Event):void {
this.bild.text=String(currentFrame);

}

 

MovieClips

Eigenschaften

Die Eigenschaften der Movieclips haben in Actionscript 3 andere Bezeichnungen. Es fällt auf, dass der Unterstrich verschwunden ist. Eine Auflistung der Eigenschaften findet man im Actionbedienfeld unter flash.display / Movieclip / Eigenschaften (properties) Oder im Actionscript 3 Komponenten Referenzhandbuch. Im nächsten Tipp wird erklärt, wie man Movieclips dynamisch erzeugt. Die EventHandler von AS2 gibt es nicht mehr.

Einige Eigenschaften sind neu hinzugekommen:

Den bei Buttons üblichen Handcursor auch in Movieclips anzeigen

my_mc.buttonMode = true;
my_mc.useHandCursor = true;

 

 

addChild() / Display Object Container / dynamisch Instanzen von MC`s aus der Bibliothek erzeugen

swf SWF Beispiel movieClip.swf

Den AS2 Befehl attachMovieClip() gibt es nicht mehr. In Actionscript 3 werden Instanzen aus der Bibliothek mit addChild() auf die Bühne gebracht. Der Befehl duplicate Movieclip wurde in AS3 ersatzlos gestrichen. In AS3 ist es möglich alle Instanzen anzusprechen, auch die die man in der IDE eingefügt hat. Selbst dann, wenn man keinen Instanznamen vergeben hat.

Das Thema bei Adobe Programmieren mit Anzeigobjekten http://livedocs.adobe.com/flash/9.0_de/main/00000141.html

 

ADDED_TO_STAGE / REMOVED_FROM_STAGE

ADDED_TO_STAGE (AS3 Referenzen)
Wenn man eine Movieclip- Klasse oder ein andere Display Objekt Klasse hat und möchte in dieser Klasse einen Event Listener auf die stage registrieren, so ist das erst dann möglich, wenn die Bühne bekannt ist. Das ist der Fall, wenn das Objekt an die Displayliste angehängt wurde. addChild()

REMOVED_FROM_STAGE (AS3 Referenzen)
Wenn man ein DisplayObject aus der Displayliste entfernt, werden nicht automatisch alle Events entfernt, die eventuell in der Klasse enthalten sind, das kann zu Fehlern führen und außerdem belastet es den Speicher, besonders bei onEnterFrame Ereignissen. Abhilfe schafft hier removedFromStage. Damit kann man alle enthaltenen Events löschen, sobald die Instanz aus der Displayliste entfernt wird.

package {
	import flash.display.MovieClip;
	import flash.events.*;


	public class MyMc extends MovieClip {


		//----------------------------------------------

		public function MyMc() {
			super();

			if (stage) {
				init();
			} else {
				addEventListener(Event.ADDED_TO_STAGE,init);
			}
		}



		//-----------------------------------------------

		private function init(e:Event=null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			addEventListener(Event.REMOVED_FROM_STAGE, destroy);
			stage.addEventListener(MouseEvent.MOUSE_UP, getMouseX);
		}

		//-----------------------------------------------


		function getMouseX(evt:MouseEvent):void {
			trace("X-Mouse ist: "+mouseX);
		}

		//-----------------------------------------------

		private function destroy(e:Event):void {
			removeEventListener(Event.REMOVED_FROM_STAGE, destroy);
			stage.removeEventListener(MouseEvent.MOUSE_UP, getMouseX);
		}

	}
}

Alle Objekte der Displayliste löschen

Alle Objekte der Displayliste löscht man am besten mit einer while Schleife

while (this.numChildren>0) {

this.removeChildAt(this.numChildren-1);

}

Alle DisplayObjects abfragen / komplette Displaylist abfragen

und wenn es Movieclips sind, werden sie gestoppt. Funktioniert auch im strikten Modus.


function displayListStop(container:DisplayObjectContainer):void {
	var child:DisplayObject;
	var movie:*;
	var clip:MovieClip;
	for (var i:uint=0; i < container.numChildren; i++) {
		child=container.getChildAt(i);
		if (child is MovieClip) {
			movie=child;
			clip=movie;
			clip.stop();
		}
		if (container.getChildAt(i) is DisplayObjectContainer) {
			displayListStop(DisplayObjectContainer(child));
		}
	}
}

 

Aufruf der Funktion für die gesamte Bühne. Man achte auf die Syntax: this.stage

displayListStop(this.stage);

 

Tutorial Drop Down Menü

4 Beispiele. Diese Beispiele sind eine gute Übung, um sich mit den Klassen vertraut zu machen.

 

Loader/ externe Filme laden

swf SWF Beispiele

Hier ein paar Beispiele, wie man mit Actionscript 3 externe Filme, also swf Filme lädt. In AS2 wurde das mit loadMovie gemacht, in AS3 macht man das mit der Loader Klasse.

Weitere anschauliche Beispiele zum Thema hier: http://www.java2s.com

Objekte Zeichnen / Shape/ Display Objekte

swfBeispiele lineTo Linien und Formen (Kreise, Rechtecke) dynamisch erstellen
Anhand mehrerer Beispiele werden hier die Grundlagen der Zeichenfunktionen mit AS3 erklärt. Kreise, Rechtecke, Linien per Actionscript zeichnen. Siehe hierzu auch die Tipps in AS2, denn die Methoden sind sehr ähnlich.

Textobjekt / Textformat

Beispiele dynamische Textfelder mit Formatierungen, mehrere Beispiele

Texte dynamisch erstellen, Textformatierung dynamisch in AS3, die Klassen TextFormat, TextField

Tastatursteuerung und programmierte Bewegung

Beispiele programmierte Bewegung per Tastatur

Hier geht es
a) um die Keyboard Funktionen und den KeyboardEvent.
b) um programmierte Bewegungen von MovieClips, die man per Tastatur steuert.

Sound

 

In den Livedocs habe ich nichts zu dem Thema gefunden, wie man Sounds abspielt, wenn man den Sound in der Bibliothek als Klasse definiert hat. Aber dazu gibt es hier ein gutes Tutorial im Netz.

How to use library sounds in AS3

Hier geht es um den bekannten on/ off Button, der den Sound an und aus stellt. Bei dieser Lösung ist es völlig schnuppe, ob der Sound streamingmäßig im Bild einer Zeitleiste definiert ist oder nicht. Der Sound könnte auch aus einer SWF-Datei stammen die reingeladen wird. Also mit anderen Worten der Sound wird generell geregelt.

Man erstelle sich einen MC mit zwei Bildern in der Zeitleiste. Ins erste Bild kommt ein Button, der den Sound ausstellt off_btn, ins zweite Bild kommt ein Button der Sound wieder anstellt on_btn

Bild 1

stop();
off_btn.addEventListener(MouseEvent.CLICK, leise);

function leise(event:MouseEvent):void
{
SoundMixer.soundTransform = new SoundTransform(0, 0);
event.currentTarget.parent.gotoAndStop(2);
}

Bild 2

on_btn.addEventListener(MouseEvent.CLICK, laut);

function laut(event:MouseEvent):void
{
SoundMixer.soundTransform = new SoundTransform(1, 0);
event.currentTarget.parent.gotoAndStop(1);
}

Der erste Parameter ist die Lautstärke, welche von 0 bis 1 angegeben wird. Der zweite Parameter bezieht sich auf die Kanäle, welche von -1 bis 1 angegeben werden. Der Wert 0 bedeutet, beide Kanäle haben die gleiche Lautstärke.

Man kann den Sound auch komplett abstellen, ich weiß allerdings nicht, wie man ihn genauso einfach startet.

SoundMixer.stopAll();

Timer / Timer Event

Siehe neue Seite

 

globalToLocal(x,y)

getBounds() // getRect()

Eine Movieclip, dessen Inhalt nicht mittig im Registrierpunkt liegt, mittig in einen anderen, (leeren) Movieclip platzieren. Siehe auch den Tipp "Programmierte Bewegung mit Richtungswechsel, nach Wandberührung"

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen

Point

Passend zum Thema globalToLocal() und getBounds() siehe auch das Thema Point

AS2 _xmouse ist in AS3 mouseX

var myVar:Number;
back.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
function enterFrameHandler(event:Event):void {
myVar = root.mouseX;
trace(myVar)
}

Im folgenden Beispiel wird die Mausposition relativ zum Mittelpunkt des Movieclips ausgegeben

var myVar:Number;
back.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
function enterFrameHandler(event:Event):void {
myVar = back.mouseX;
trace(myVar)
}

hitTest Kollisionserkennung in AS3

In AS3 gibt es hitTestObject(DisplayObject) und hitTestPoint(x, y, Form). Hat eine Kollision stattgefunden liefert die hitTest Funktion den Wert true, andernfalls false.

ersterMc.hitTestObject(zweiterMc);

Im folgenden Beispiel wird überprüft, ob die Mausposition nicht innerhalb des Hintergrunds der Movieclipinstanz "meinMc" liegt . Der dritte Parameter ist ein boolscher Wert. Bei true, wird nur der gefüllte Bereich des MC's herangezogen. Bei false gilt das kleinstmöglichste Rechteck, welches sich um den Inhalt des MC's legt als Überprüfungsbereich.

public function kollision(evt:Event) {

if (! meinMc.hitTestPoint(root.mouseX,root.mouseY,false)) {

meinMc.removeEventListener(Event.ENTER_FRAME, kollision); hideTextfields();

}

}

Event Listener hinzufügen:

meinMc.addEventListener(Event.ENTER_FRAME, kollision);


 

 

Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen


Für den Inhalt dieser Seite ist eine neuere Version von Adobe Flash Player erforderlich.

Adobe Flash Player herunterladen

 

 

printJob / drucken

swf SWF Beispiel printJob.swf

Hier die Adobe Seite zum Thema
Hier mein AS2 Tipp zum Thema

 

 


 

http://www.pastorpixel.de