Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-12-2004, 19:52   #1 (permalink)
anj
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 4
Interval in einer klasse mit fnkt -> geltungsbereich ?

Hi!

ich kann irgendwie mein interval nicht beenden.


Hier wird meine Funktion windowsresize aufgerufen
scope ist der this zeiger meiner klasse. this._parent ist hierbei mein Fenster welches in der grösse verändern will.


PHP-Code:
mcWindow.mcWindowResize.onPress = function():Void {
        
scope.windowresize(this._parent);
    } 

PHP-Code:
private function windowresize(meinMC:MovieClip){

    var 
meinInterval setInterval(windowresize,1,meinMC);

    
trace (meinInterval);

//schnipsel schnipsel ....

    
meinMC.mcWindowResize.onRelease = function():Void {
        
clearInterval(meinInterval);
    } 

clearInterval funktioniert hierbei nicht, in die funktion geht er rein. Habe nur festgestellt dass er irgendwie die variable meinInterval verliert

Muss ich die variable meinInterval mitübergeben ?

Geändert von anj (02-12-2004 um 20:03 Uhr)
anj ist offline   Mit Zitat antworten
Alt 02-12-2004, 22:37   #2 (permalink)
.
 
Registriert seit: May 2003
Ort: bayern
Beiträge: 1.117
wie issen das bei mx 2004, 'var' innerhalb einer function ist doch lokal, oder mach mal 'meinInterval' global, dann solltest du es löschen können.
__________________
[mooseMash]
mooseMash ist offline   Mit Zitat antworten
Alt 03-12-2004, 07:58   #3 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
wenn du es schön machen willst mach es so:

Bau dir erstmal ne Utility Klasse die so aussieht:
(Glaub mir du wirst das Delegate lieben sobald du es verstanden hast)

ActionScript:
  1. class Delegate
  2.  {
  3.     static function createPacked(obj:Object, func:Function):Function
  4.     {
  5.         var args:Array = arguments.splice(2);
  6.        
  7.         return function()
  8.         {
  9.            
  10.             return func.apply(obj, args);
  11.         };
  12.        
  13.     }
  14.     static function create (obj:Object, func:Function):Function
  15.     {
  16.         return function()
  17.         {
  18.             return func.apply(obj, arguments);
  19.         };
  20.        
  21.     }
  22. }
dann kannst du deine MC Funktionen auf deine Klasse umleiten:
ActionScript:
  1. import Delegate;
  2.  
  3. class TestClass {
  4.  
  5. public function TestClass (
  6.  
  7.     private var clip:MovieClip;
  8.    
  9.     public function TestClass (p_clip:MovieClip)
  10.     {
  11.         clip = p_clip;
  12.        
  13.         // create Packed wenn du gleich Argumente mitgeben willst
  14.         clip.onRelease = Delegate.createPacked(this, sayMCName, clip);
  15.        
  16.         // oder einfach create wenn du z.b. mit einem LoadVars-Object
  17.         // etwas lädst und die Rückgabearguments noch nicht feststehen
  18.         var lv:LoadVars = new LoadVars();
  19.         lv.onLoad = Delegate.create(this,varsLoaded);
  20.     }
  21.    
  22.     private function sayMCName (p_clip:MovieClip)
  23.     {
  24.         trace(p_clip._name);
  25.     }
  26.     private function varsLoaded (success:Boolean)
  27.     {
  28.         if (success == true)
  29.         {
  30.         trace("erfolgreich geladen");
  31.         }
  32.     }
  33. }
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???

Geändert von K-Grabowski (03-12-2004 um 07:59 Uhr)
K-Grabowski ist offline   Mit Zitat antworten
Alt 03-12-2004, 08:20   #4 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
dann kannst du setInterval nämlich auch als Funktion nen Delegate mitgeben
ActionScript:
  1. setInterval(Delegate.create(this,resizeWindow),10,mc)

und du musst nicht ständig irgendwelche scope Variablen deklarieren.
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Alt 03-12-2004, 08:58   #5 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
@Grabowski warum eigentlich 2 functions,
Verstehe die unterscheidung nicht. warum nicht aus 2 mach 1.


PHP-Code:
public static function create(obj:Objectfunc:Function):Function {
    var 
args:Array = arguments.splice(2);
    return function () {
        return 
func.apply(objarguments.concat(args));
    };

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 03-12-2004, 09:32   #6 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
bei der createPacked Methode, gibst du die Argumente gleich mit kannst du z.b. nem Button beim onRelease machen, dann kannst du als argument den Button mitgeben und in deiner Funktion darauf reagieren.

ActionScript:
  1. but.onRelease = Delegate.create(this, checkClickedButton, but);
  2.  
  3. private function checkClickedButton (but:Movieclip)
  4. {
  5.     if (but._name == "eins") // tu irgendwas
  6. }

bei der zweiten create Methode werden die Argumente erst beim Aufruf der Funktion mitgegeben, z.b. bei nem LoadVars object die success variable.

p.s. hab dich wohl falsch verstanden. Finde es besser die Methode explicit aufzurufen. Dann weiß man wenigstens welche Argumente ankommen, deine Variante würde ich vielleicht als dritte methode reinpacken.
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???

Geändert von K-Grabowski (03-12-2004 um 09:34 Uhr)
K-Grabowski ist offline   Mit Zitat antworten
Alt 03-12-2004, 10:39   #7 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
hi herr grabowski,

ich habe mir dein post durchgelesen und verstehe es eigentlich auch. was ich nicht verstehe ist folgendes:

PHP-Code:
//-    constructor
        
private function Smilie() {

            
EventDispatcher.initialize(_root);
                          
// WIESO geht das hier trotzdem ????
            
_intervalID setInterval(animateSmilies,_interval);
            
//initSmilies();
        
}

    
// öffentliche Methode um eine Instanz zu bekommen
        
public static function getInstance() : Smilie {
            if (
_instance == undefined)
                
_instance = new Smilie();
            return 
_instance;
        }

        
//- animierte Smilies aller X sekunden abspielen
        
public static function animateSmilies() {
            
//trace("jeze");
            
_root.dispatchEvent({type:"myEvent"});
        } 
wieso kann er die funktion animateSmilies aufrufen? eigentlich dürfte er die funktion doch gar nicht finden oder ?


ich habe es auch mit deinet TestClass probiert. wenn ich der TestClass eine funktion test() hinzufüge und im konstuktor

PHP-Code:
setInterval(test,1000,"hallo"
schreibe ruft er die funktion auch ohne delegate auf , WARUM?


gruß madFlanderz
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 03-12-2004, 11:10   #8 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
na setIntervall erwartet eine (erreichbare) funktion und das ist vom konstruktor
aus kein problem. nur wird die mthode test dann nicht im kontext des objekts
ausgeführt.
__________________
elias ist offline   Mit Zitat antworten
Alt 03-12-2004, 11:14   #9 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
so ists, trace in der funktion mal nach this.
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Alt 03-12-2004, 13:11   #10 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
stimmt. da es sich bei mir in diesem beispiel um ein singleton handelt ist es dann ja nicht so schlimm. sobald aber objekte ins spiel kommen gibts n problem.

nunja, Delegate-Class ist im meinem util ordner gespeichert und wird garantiert bald recht bald verwendung finden
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 03-12-2004, 20:18   #11 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
ich verstehe es immer noch nicht weshalb du
3 methoden definierst wenn du 1. mit einer function das gleiche ergebniss erzielst und 2. bei der jeweiligen anwendung schon erkennst um welche variante es sich handlet.

PHP-Code:
press1Handler = function(p1p2){
    
trace(p1);
    
trace(p2[0] + " // " p2[1]);
}

press2Handler = function(){
    
trace("press 2 handler");
}

loadHandler = function(successuserParameter) {
    
trace(success " // " userParameter);
}

mc1.onPress Delegate.create(thispress1Handler"param1", ["param21""param22"]);
mc2.onPress Delegate.create(thispress2Handler);
lv = new LoadVars();
lv.onLoad Delegate.create(thisloadHandler"userParameter");
lv.load("gibbetNet.txt"); 
aus allen drei beispielen wird die jeweilige anwendung klar erkennbar, das ist "für meinen Geschmack" ausreichend .

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Alt 04-12-2004, 16:15   #12 (permalink)
anj
Neuer User
 
Registriert seit: Dec 2003
Beiträge: 4
Question

Hi Leute!

Danke für die rasche antwort, aber leider verstehen ich den Code nicht 100 %. Ihr müsst mit mir wie mit einem "blutigem flash anfänger" reden!

Wozu eine "Delegate" klasse ? was macht sie? so wie ich das sehe schmeisst sie nur was zurück.(von einer funktion)... oder ?

Was ist ein LoadVars objekt ??
Was ist ein EventDispatcher ??


Meine Frage war eigentilch: der geltungsbereich...

Warum???? ist bei trace(meininterval) (funkt windowresize) die ausgabe nur einmal 1bzw.2 und dann immer undefined? Ich vermute ja, dass meinInterval nur beim ersten aufrufen existiert und danach wird ja die funktion immer wieder aufgerufen. d.h. meininterval existiert nicht mehr beim 2ten aufruf. ?! warum ?!??! es ist doch alles in einer klasse ?!/ funktion


Habe dann das ganze nochmals mit der scope var versucht (->this)

PHP-Code:
mcWindow.mcWindowResize.onPress = function():Void {
        
scope.windowresize(this._parent,scope);
    }; 


PHP-Code:
private function windowresize(meinMC:MovieClip,scope){
    
scope.meinInterval setInterval(windowresize,1,meinMC,scope);
    
trace (scope.meinInterval);


//gecutted.

    
meinMC.mcWindowResize.onRelease = function():Void {
        
trace("losgelassen");
        
clearInterval(scope.meinInterval);
    }


leider auch kein erfolg ... losgelassen wird aufjedenfall angezeigt ... doch das interval wird nicht gestoppt.

Ich suche zuerst nach einer "leichten" lösung... muss nicht unbedingt halt eine der schönsten sein ... erstmals kappieren ... dann weiterentwickeln ...
anj ist offline   Mit Zitat antworten
Alt 06-12-2004, 08:19   #13 (permalink)
Flashaholic
 
Benutzerbild von atothek
 
Registriert seit: Feb 2003
Ort: Berlin
Beiträge: 1.459
also eine scope variable ist eione lokale "userDefined" variable. du mußt sie vorher setzen zb

PHP-Code:
class TestClass{
    
    public function 
tracer (String) : Void {
        
trace (s);
    }
    
    public function 
scopeTest (mc MovieClip) : Void {
        
/** erstellen einer lokalene scope variable */
        
var scope this;
        
        
/** 
        * verwenden der scope  variable in einem neuen einzugbereiches
        * und zwar dem des mc´s 
        */
        
mc.onPress = function () : Void {
            
scope.tracer ("onPress: ruft die member function auf, mittels einer scope variablen");
        }
    }

mfg
alex
__________________
TVNEXT Solutions
atothek ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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 15:29 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele