Tweener in AS3

selle1

Erfahrenes Mitglied
Hallo,

wie kann ich bei Klick auf einen bestimmten MC (Button) eine Funktion ausführen. Habe bisher folgendes:
Die 4 MCs (Buttons) liegen als eigene MCs vor, also schreibe ich:
Code:
home_btn.addEventListener(MouseEvent.CLICK, homeclick);
function homeclick(e:MouseEvent):void
{
	var myTween1:Tween = new Tween(home_mc, "x", Elastic.easeOut, -450, 50, 4, true);
    myTween1.addEventListener (TweenEvent.MOTION_FINISH, motionEnd);
    function motionEnd (e:Event)
{
    trace ("finished");
}
	
}

Code:
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;

var myTween1:Tween = new Tween(home_mc, "x", Elastic.easeOut, -450, 50, 4, true);

Nun habe ich eben 4 MCs (Buttons) und muss jeweils bei Klick auf den entsprechenden MC den "richtigen MC" animieren.
Dies wären dann die anderen Animationen:
Code:
var myTween2:Tween = new Tween(ueber_mc, "x", Elastic.easeOut, -450, 50, 4, true);
var myTween3:Tween = new Tween(service_mc, "x", Elastic.easeOut, -450, 50, 4, true);
var myTween4:Tween = new Tween(kontakt_mc, "x", Elastic.easeOut, -450, 50, 4, true);
 
Hallo,

jeder Event verfügt über die Eigenschaft "currentTarget", welcher eine Referenz auf das auslösende Objekt darstellt. Um einen Link zwischen den Buttons und den jeweiligen MovieClips zu machen, könntest du eine ID setzen, die den jeweilien "Namen" des Paars beinhaltet und somit auch für die Referenzierung gebraucht werden kann. Um welche ID es sich handelt, benutzt du dann "currentTarget":

Code:
home_btn.id = "home";
service_btn.id = "service";
ueber_btn.id =  "ueber";

//Für alle Buttons
home_btn.addEventListener(MouseEvent.CLICK, buttonClick);
service_btn.addEventListener(MouseEvent.CLICK, buttonClick);
ueber_btn.addEventListener(MouseEvent.CLICK, buttonClick);

function buttonClick(e:MouseEvent):void {
	var button: MovieClip = e.currentTarget as MovieClip;
	var myTween1:Tween = new Tween(this[button.id+"_mc"], "x", Elastic.easeOut, -450, 50, 4, true);
    myTween1.addEventListener (TweenEvent.MOTION_FINISH, motionEnd);
	
}

function motionEnd (e:Event) {
    trace ("finished");
}

Gruss
 
Hallo,

hab es mit Deinem Vorschlag getestet und erhalte folgende Fehlermeldung, die ich auch schon vorher mit meinen Versuchen erhielt:

Code:
TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.
	at fl.transitions::Tween/setPosition()
	at fl.transitions::Tween/set position()
	at fl.transitions::Tween$iinit()
	at teil1_fla::MainTimeline/buttonClick()

Anbei mein Code:

Code:
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;

var myTween1:Tween = new Tween(home_mc, "x", Strong.easeOut, -450, 50, 1, true);
stop();
home_btn.id = "home";
service_btn.id = "service";
ueber_btn.id =  "ueber";
kontakt_btn.id = "kontakt";
//Für alle Buttons
home_btn.addEventListener(MouseEvent.CLICK, buttonClick);
service_btn.addEventListener(MouseEvent.CLICK, buttonClick);
ueber_btn.addEventListener(MouseEvent.CLICK, buttonClick);
kontakt_btn.addEventListener(MouseEvent.CLICK, buttonClick);
function buttonClick(e:MouseEvent):void {
	var button: MovieClip = e.currentTarget as MovieClip;
	var myTween1:Tween = new Tween(this[button.id+"_mc"], "x", Strong.easeOut, -450, 50, 1, true);
    myTween1.addEventListener (TweenEvent.MOTION_FINISH, motionEnd);
	
}

function motionEnd (e:Event) {
    trace ("finished");
}

Ich verstehe diese Meldung nicht ganz. Was bedeutet null-Objektverweis?
 
Hallo,

ein null-Objekt ist ein Objekt, dessen Wert undefiniert ist (undefined, bei as3 null). Flashplayer 9 kontrolliert da ein ganzes Stück konsequenter und gibt einen Fehler aus, wenn du Methoden eines nicht vorhandenen Objekts aufrufst. Wahrscheinlich ist einer deiner Buttons oder Animations-Clips nicht vorhanden, falsch angeschrieben etc..

Gruss
 
Nimm doch ne gewrappte Funktion, dann kannst du im EventListener den MC als Parameter übergeben:
Code:
function wrappedFunction(mc:MovieClip):Function
{
  return function(evt:MouseEvent):void
  {
    //Hier kommt der Tween für den übergebenen MC
    new Tween(mc, "x", Strong.easeOut, -450, 50, 1, true);
  }
}

und verwenden kannst du das dann so:
Code:
home_btn.addEventListener(MouseEvent.CLICK, wrappedFunction(deinMovieClip));

*Code ungetestet!
 
Zurück