Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-11-2008, 23:45   #1 (permalink)
Neuer User
 
Registriert seit: May 2004
Beiträge: 7
Question Problem mit OOP Funktionsaufrufinnerhalb einer function

Hallo Leute,

ich habe ein ärgerliches Problem. Und zwar habe ich folgenden Beispielcode:
Code:
import mx.utils.Delegate;
import mx.transitions.Tween;
import mx.transitions.easing.*;

class Carousel extends MovieClip {
	public function Carousel (){
		trace("construktor");
	}
	public function begin(){
	t.icon.onRelease = Delegate.create(t,released);
	}
	private var released:Function = function() {
		trace("released");
		var t:MovieClip = this;
		var tw:Tween = new Tween(t,"_xscale",Strong.easeOut, t._xscale,100,1,true );
		trace("onMotionStopped");
		tw.onMotionStopped = Delegate.create(t, unReleased); 
		};
	private var unReleased:Function = function() {
		trace("unReleased");
		};
}
Mein Problem dabei ist jetzt, dass folgende Zeile ohne Auswirkung bleibt:
tw.onMotionStopped = Delegate.create(t, unReleased);

Kann es sein, dass man innerhalb einer Funktion nicht noch einmal eine Funktion aufrufen kann?? wenn ich hingegen folgendes schreibe funktioniert es:
Code:
import mx.utils.Delegate;
import mx.transitions.Tween;
import mx.transitions.easing.*;

class Carousel extends MovieClip {
	public function Carousel (){
		trace("construktor");
	}
	public function begin(){
	t.icon.onRelease = Delegate.create(t,released);
	}
	private var released:Function = function() {
		trace("released");
		var t:MovieClip = this;
		var tw:Tween = new Tween(t,"_xscale",Strong.easeOut, t._xscale,100,1,true );
		trace("onMotionStopped");
		var unReleased:Function = function() {
			trace("unReleased");
		};
		tw.onMotionStopped = Delegate.create(t, unReleased); 
		};

}
Hat jemand einen guten Link(Tutorials ) für mich bzw. eine Info nach was ich suchen muss -> damit ich weiter komme?

Vielen Dank im Voraus

Geändert von |Xne.3 (09-11-2008 um 00:04 Uhr)
|Xne.3 ist offline   Mit Zitat antworten
Alt 09-11-2008, 10:20   #2 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
PHP-Code:
public function begin () {
        
t.icon.onRelease Delegate.create (treleased);
    } 
Laut deinem Script ist t an dieser Stelle nicht bekannt.
Das wäre das erste.

Dann leg mal die functions mit den Standard-Syntax an (wie auch die public function), nicht mit diesem Variablen-Syntax var soundso:Function = function():Void {} . Ich wusst gar nicht, dass der überhaupt noch zulässig ist in AS2-Klassen.
__________________
we will stop enhancing the truth in 3, 2, ...

Geändert von SpecOps-12 (09-11-2008 um 10:21 Uhr)
SpecOps-12 ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:19   #3 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
was ist bitte ein OOP Funktionsaufruf

Vielleicht solltest du Funktionen auf die übliche Weise definieren:
Nicht
PHP-Code:
private var released:Function = function() { 
sondern
PHP-Code:
private function released():void
Verschachtelt definieren solltest du die Funktionen nicht, das macht man nur, wenn man wirklich eine anonyme Funktion haben möchte.


EDIT: oh, das stand ja schon da
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 09-11-2008, 13:35   #4 (permalink)
Neuer User
 
Registriert seit: May 2004
Beiträge: 7
danke für die tipps, nur leider ...

funktioniert das auch nicht. ich habe jetzt folgendes probiert:

PHP-Code:
import mx.utils.Delegate;
import mx.transitions.Tween;
import mx.transitions.easing.*;

class 
Classtest extends MovieClip {
    private var 
home:MovieClip;
    private var 
luky:String;
    public function 
Classtest (s:String) {
        
trace ("constr: " s);
        
home this;
        
luky "Lucky";
        
trace (luky);
    }
    
    public function 
begin () {
    
trace ("begin");
    var 
t:MovieClip _root.attachMovie("icon","icon",100);
    
t.onRelease Delegate.create(t,released);
    
trace (home);
    }
    private function 
unReleased():Void {
         
trace("unReleased");
        
         
    }
    private function 
released():Void {
        
trace("released");
        var 
t:MovieClip this;
        var 
tw:Tween = new Tween(t,"_x",Strong.easeOutt._x,t._x 20,1,true );
        
        
tw.onMotionStopped Delegate.create(tunReleased); 
    }



ich rufe die Funktion begin auf. die wiederum attached ein attached ein ICON, wenn ich jetzt auf das icon klicke, wird die function released aufgerufen, nur wenn das Tween fertig ist, wird leider unReleased nicht aufgerufen. kann das sein, dass man inerhalb einer mit Delegate.create aufgerufenen funktion nicht mehr auf die private functions der Klasse zugreifen kann?? wenn ja, wie kann ich trotzdem drauf zugreifen?

thx for you help,
greez xne
|Xne.3 ist offline   Mit Zitat antworten
Alt 09-11-2008, 14:56   #5 (permalink)
ChronoGuard
 
Benutzerbild von SpecOps-12
 
Registriert seit: Mar 2002
Ort: Saarbrücken
Beiträge: 2.649
der Scope des Tweens liegt auf dem icon, das auf der _root erzeugt wird, nicht auf der Instanz deiner Klasse.
Denn du deligierst den Scope der onRelease-Listener-Function ebenfalls auf das icon, nicht auf die Klasseninstanz "home".

Nachfolgend ne Lösung.
Wobei ich die Klasse dann eher direkt an das Bibliotheken-Objekt anhängen würde und mit attachMovieClip statt "new Classtest()" initiieren würde.
Ist in AS2 halt leider alles etwas seltsam mit MovieClip-Erben.

PHP-Code:
import mx.utils.Delegate;
import mx.transitions.Tween;
import mx.transitions.easing.*;
class 
Classtest extends MovieClip {
    private var 
home:MovieClip;
    private var 
t:MovieClip;
    private var 
luky:String;
    public function 
Classtest (s:String) {
        
trace ("constr: " s);
        
home this;
        
luky "Lucky";
        
trace (luky);
    }
    public function 
begin () {
        
trace ("begin");
        
_root.attachMovie ("icon""icon"100);
        
t.onRelease Delegate.create (homereleased);
    }
    private function 
unReleased ():Void {
        
trace ("unReleased");
    }
    private function 
released ():Void {
        
trace ("released");
        var 
tw:Tween = new Tween (t"_x"Strong.easeOutt._xt._x 201true);
        
tw.onMotionStopped Delegate.create (homeunReleased);
    }

__________________
we will stop enhancing the truth in 3, 2, ...
SpecOps-12 ist offline   Mit Zitat antworten
Alt 09-11-2008, 15:59   #6 (permalink)
Neuer User
 
Registriert seit: May 2004
Beiträge: 7
Talking

super, danke für die rasche info! das mit dem scope war mir leider gar nicht so bekannt -> jetzt funktionierts! nochmals, THANKS!!
|Xne.3 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
class, delegate, klassen, oop

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele