Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-05-2005, 21:30   #1 (permalink)
Neuer User
 
Benutzerbild von Beisser
 
Registriert seit: Jan 2005
Beiträge: 27
während laden eines Bildes globale Variable (setInterval) löschen

Hallo,

vielleicht hat jmd sowas schon mal gehabt:
Eine Klasse Bilder.as zeigt Bilder hintereinander an.
Hier wird setInterval() benutzt und in _global.intervall gespeichert.
Drücke ich auf einen Button wird _global.intervall gelöscht (der timer stoppt) und eine andere Instanz der Klasse Bilder.as erstellt, diese zeigt andere Bilder an und der timer beginnt wieder.
So weit, so geht´s.

Problem:
Die Bilder werden mit einem preloader geladen (mit onload). Wird während des ladens eines Bildes ein Button gedrückt, um eine andere Bilderschau zu starten, wird _global.intervall nicht gelöscht???

Danke für alles,
Beisser

Geändert von Beisser (18-05-2005 um 21:32 Uhr)
Beisser ist offline   Mit Zitat antworten
Alt 18-05-2005, 22:03   #2 (permalink)
Eisverkäufer
 
Benutzerbild von AlexSchliebner
 
Registriert seit: Aug 2003
Ort: München
Beiträge: 81
...poste mal den Code
AlexSchliebner ist offline   Mit Zitat antworten
Alt 18-05-2005, 22:21   #3 (permalink)
flachzange
 
Benutzerbild von elias
 
Registriert seit: Jun 2003
Ort: berlin
Beiträge: 3.932
Das Problem ist vermutlich das du _global.intervall immer überschreibst. Wenn
also ein Intervall läuft und noch einer aktiviert wird, überschreibst du den alten.
Diesen kannst du also nicht mehr ansprechen bzw. löschen.
__________________
elias ist offline   Mit Zitat antworten
Alt 19-05-2005, 11:34   #4 (permalink)
Neuer User
 
Benutzerbild von Beisser
 
Registriert seit: Jan 2005
Beiträge: 27
Habe etwas herausgefunden an was es wohl liegt:
_global.intervall wird dann nicht gelöscht, wenn ich einen Doppelklick auf den Button mache, der die funktion aufruft in der der timer gelöscht wird. Da es einen Doppelklick in AS nicht gibt sind es ja zwei Klicks schnell hintereinander. Kann es sein, dass der zweite Klick einfach zu früh kommt?


Hier ein paar Auszüge aus dem Quältext
in main.fla
ActionScript:
  1. _global.intval;

in Klasse Nav.as
ActionScript:
  1. private function neuerInhalt(buttonId){
  2.               var scope:Nav=this;
  3.                
  4.         //intervall löschen
  5.   if(_global.intval){
  6.      trace("timer vorhanden: " + _global.intval);
  7.      delete _global.intval;
  8.      clearInterval(_global.intval);
  9.      if(!_global.intval){
  10.           trace("timer gelöscht:" + _global.intval);
  11.      }
  12.   }
  13.  
  14. //PHP-Vars einlesen und dazugehörigen Clip ausgeben
  15. lv = new LoadVars();               
  16. lv.onLoad = function(sucess){      
  17.      if (sucess){
  18.            //neue Instanz mit geladenen PArametern erstellen
  19.           //z.Bsp.
  20.          scope.Bilder = new Bilder(this.X, this.Y, buttonId); //in Bilder wird setIntervall() gestartet
  21.      }         
  22. }
  23.  
  24. //neuerInhalt(buttonId) wird über dynamisch generierte Buttons ausgeführt
  25. //Bsp:
  26. button1.onRelease = function(){
  27. neuerInhalt(this.id);
  28. }

Geändert von Beisser (19-05-2005 um 11:47 Uhr)
Beisser ist offline   Mit Zitat antworten
Alt 19-05-2005, 11:42   #5 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Hab jetzt keine Ahnung, aber ich denke der Fehler liegt hier:
PHP-Code:
delete _global.intval;
clearInterval(_global.intval); 
Du löschst ja die Variable bevor Du das Intervall löschst, das düfte nicht gehen.
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 19-05-2005, 11:50   #6 (permalink)
Neuer User
 
Benutzerbild von Beisser
 
Registriert seit: Jan 2005
Beiträge: 27
@render[i]: ja, da habe ich ziemlichen Müll gemacht, habe es geändert (umgedreht und delete ganz rausgenommern) aber das ist auch nicht das Problem.

neue Feststellung:
der Fehler tritt immer einen Klick nach dem Doppelklick auf.
Vermutung: durch einen Doppelklick werden zwei timer gestartet. Der zweite überschribt den ertsen, der dadruch nicht mehr ansprechbar (löschbar) ist. Beim nächsten Klick wird der zweite gelöscht, der erste läuft aber weiter. Na toll!

Kann man setIntervall() in ein Array speichern und dann einfach das ganze Array löschen, um so jeden timer zu erwischen?
Beisser ist offline   Mit Zitat antworten
Alt 19-05-2005, 11:54   #7 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Ja könnte man mit nem Array lösen, aber geht bestimmt noch besser.
Haste schon einmal nach ner Methode gesucht mit der man einen Doppelklick richtig erkennen kann und wo wird eigentlich Dein Intervall in der Variable _global.interval gespeichert?
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 19-05-2005, 16:03   #8 (permalink)
Neuer User
 
Benutzerbild von Beisser
 
Registriert seit: Jan 2005
Beiträge: 27
So, das Problem ist gelöst.
Erst mal zu Deiner Frage render[i]: das Intervall wird im Konstruktor der Klasse Bilder.as in der Variable _global.interval gespeichert. Siehe oben in der Klasse Nav.as in der onload function.
ActionScript:
  1. scope.Bilder = new Bilder(this.X, this.Y, buttonId); //in Bilder wird setIntervall() gestartet
  2.  
Ich habe jetzt den Doppelklick eliminiert/abgefangen, danke für den tipp rendner[i]. Dazu habe ich in der onRelease function des Buttons ein paar Zeilen eingefügt. Geht bestimmt schöner als Methode oder so, aber es funktioniert.

Doppelklick abfangen: (Quelle: geiles Forum)
ActionScript:
  1. if(scope.lastClick == undefined){scope.lastClick = 300;}
  2. if(getTimer() - scope.lastClick < 300){
  3.    //trace("Doppelklick");
  4. }else{
  5.    trace("single Klick" );
  6.    scope.neuerInhalt(this.id);               
  7. }
  8. scope.lastClick = getTimer();
Beisser 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 11:17 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele