Flashhilfe.de - Flash Community

Wohin mit clearInterval? [Flash MX 2004]

Forum > Flash Entwicklung > Wohin mit clearInterval?

 


Neues Thema anlegenRegistrierenLogin Seite1 2
 
Lesezeichen
 24.03.2005, 10:26 
Benutzerbild von Cendri
Beiträge: 27
Registriert: Mar 2005

Wohin mit clearInterval?
Hallo,

also ich hab ein Quiz, was auch funktioniert. Nun will mein Prof, dass das Bild nach Beantwortung der Frage 3 Sek steht und erst dann die neue Frage geladen wird.

Ich hab für das Quiz 4 Movieclips als Buttons, alle haben das selbe AS:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
onClipEvent (mouseDown) {
   if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
      if (_root.richtigeAntwort == 4) {
         this.gotoAndStop("korrekt");
         _root.punktestand = _root.punktestand+5;
      } else {
         this.gotoAndStop("falsch");
      }
   }
}
onClipEvent (mouseUp){
   id_frage = setInterval(_root.erzeugeFrage4, 3000);
}
on(releaseOutside){
   this.gotoAndStop(1);
   _root.n = _root.n + 1;
   if (_root.n == 11) {
      _root.gotoAndStop(33);
   }
   else {
      loadVariablesNum("frage" + _root.n + ".txt", 0);
   }
}

Für jeden Clip habe ich eine Funktion erzeugeFrage+ClipNummer. Die Funktion ist in der Ebene in der auch die MCs sind und sieht so aus:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function erzeugeFrage4(){
   a4.gotoAndStop(1);
   if (a4.hitTest(_root._xmouse, _root._ymouse,true)) {
      _root.n = _root.n + 1;
      if (_root.n == 11) {
         _root.gotoAndStop(35);
      }
      else {
         loadVariablesNum("frage" + _root.n + ".txt", 0);
      }
   }
   a1.clearInterval(id_frage);
   a2.clearInterval(id_frage);
   a3.clearInterval(id_frage);
   a4.clearInterval(id_frage);
}


Das Problem ist, dass das Interval nicht gelöscht wird...

Was mach ich falsch? Über hilfe wär ich echt dankbar...

Gruß
Cendri

Liebe Grüße

Cendri

******************************
 
nicht sichtbar für Mitglieder
 24.03.2005, 13:18Re1
Benutzerbild von Creator
Beiträge: 514
Registriert: Jul 2003

Äh Memont mal. Also oben bei Deinen MCs würde ich ja von Anfang an mal ein on(press){} und ein on(release){} verwenden. Damit sparst Du Dir schon mal die _root.xmouse -.ymouse Abfrage. (diese Befehle gehen nämlich auch bei MCs und nicht nur bei Buttons) Und es reagieren auch nicht alle MC die ganze Zeit auf das mouseup, außer das ist beabsichtigt, aber das kann ich mir irgendwie nicht vorstellen. Aber das ist ja nicht Bestandteil deiner Frage gewesen.

Der intervall kann so nicht gelöscht werden. clearIntervall benötigt ja den Parameter id_frage. Aber den kennt es nicht weil der in den MCs liegt.  clearIntervall bezieht sich nicht auf den MC von dem aus er angelegt wurde. Deswegen gibt es ja die ID.

Das ganze ginge nur wenn du das so schreibst

clearIntervall(a1.id_frage);
clearIntervall(a2.id_frage);
usw.

Ein einfacherer Lösungsansatz ist folgender.

Du legst Dir in der Hauptzeitleiste einen leeren Array an. Meinetwegen myIntervalls.

Dann kommt in dein on(Release) bzw. Deinem jetzigen onClipEvent(mouseUp) folgender teil

ActionScript:
1_parent.myIntervalls.push(setInterval(_root.erzeugeFrage4, 3000));


Damit hinterlegst Du die Intervall ID in dem Array

in diese ominöse andere Funktion kommt dann folgendes Script ans Ende

ActionScript:
1
2
3
for(i in myIntervalls){
clearIntervall(myIntervalls[i]);
}


Funktioniert in jedem Fall da Du jetzt auf die IDs zugreifen kannst.

Grüße

CR

\\\"Sometimes i think Flash is female\\\"

Zitat S. Wolter
\\\"Sometimes i think Flash is female\\\"

Zitat S. Wolter
 24.03.2005, 14:09Re2
Benutzerbild von umlart
Beiträge: 6212
Wohnort: Berlin
Registriert: Nov 2002

änder mal...
ActionScript:
1
2
3
for(i in myIntervalls){
clearInterval(myIntervalls[i]);
}


*Man muß nicht wissen wie es geht,
man muß nur wissen wo es steht.*
*Man muß nicht wissen wie es geht,
man muß nur wissen wo es steht.*

 
nicht sichtbar für Mitglieder
 24.03.2005, 14:14Re3
Benutzerbild von Creator
Beiträge: 514
Registriert: Jul 2003

Ups, verschrieben. Sorry

\\\"Sometimes i think Flash is female\\\"

Zitat S. Wolter
 24.03.2005, 15:36Re4
Benutzerbild von Cendri
Beiträge: 27
Registriert: Mar 2005

Themenautor/in

Hallo ich hab das jetzt soweit, dass der erste Quizdurchgang ohne Probleme läuft. Starte ich das Quiz aber ein zweites Mal. Läuft es einfach durch, d.h. die Fragen werden ohne das ein Event passiert einfach angespielt.

Das Script auf den MCs sieht wie folgt aus:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
on(release){
      if (_root.richtigeAntwort == 1) {
         this.gotoAndStop("korrekt");
         _root.punktestand = _root.punktestand+5;
      }
      else {
         this.gotoAndStop("falsch");
      }
   myInterval = setInterval(_root.weiter1,1000);
}
on(releaseOutside){
   this.gotoAndStop(1);
   _root.n = _root.n + 1;
   if (_root.n == 11) {
      _root.gotoAndStop(33);
   }
   else {
      loadVariablesNum("frage" + _root.n + ".txt", 0);
   }
}


Die Funktionen weiter1, weiter2, weiter3 und weiter4 die in einer Ebene der Hauptzeitleiste liegen, sehen so aus:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function weiter1(){
   a1.gotoAndStop(1);
   _root.n = _root.n + 1;
   if (_root.n == 11) {
      _root.gotoAndStop(35);
   }
   else {
      loadVariablesNum("frage" + _root.n + ".txt", 0);
   }
   clearInterval(a1.myInterval);
}

function weiter2(){
   a2.gotoAndStop(1);
   _root.n = _root.n + 1;
   if (_root.n == 11) {
      _root.gotoAndStop(35);
   }
   else {
      loadVariablesNum("frage" + _root.n + ".txt", 0);
   }
   clearInterval(a2.myInterval);
}
function weiter3(){
   a3.gotoAndStop(1);
   _root.n = _root.n + 1;
   if (_root.n == 11) {
      _root.gotoAndStop(35);
   }
   else {
      loadVariablesNum("frage" + _root.n + ".txt", 0);
   }
   clearInterval(a3.myInterval);
}
function weiter4(){
   a4.gotoAndStop(1);
   _root.n = _root.n + 1;
   if (_root.n == 11) {
      _root.gotoAndStop(35);
   }
   else {
      loadVariablesNum("frage" + _root.n + ".txt", 0);
   }
   clearInterval(a4.myInterval);
}

Kann es sein, dass Flash beim 2. Abspielen einfach die Funktionen startet?
Wie unterbinde ich das?

Gruß
Cendri
Liebe Grüße

Cendri

******************************
Geändert von Cendri am 24.03.05 um 16:25 Uhr

 24.03.2005, 16:55Re5
Benutzerbild von H@ilo
Beiträge: 15261
Wohnort: Bremen
Registriert: Jan 2002

Bitte keine Doppelpostings.

Interessant wäre zu wissen, wie du das Quiz neu startest.
Schon mal daran gedacht, alle Variablen zurück zu setzen oder das Movie mit loadMovieNum() neu zu laden?

H@ilo
Freizeitflasher
H@ilo
Freizeitflasher
 25.03.2005, 08:55Re6
Benutzerbild von Cendri
Beiträge: 27
Registriert: Mar 2005

Themenautor/in

Hallo H@ilo,

das Quiz ist eine Szene im Flashfilm, der eine komplette Webseite darstellt.
Also kein seperater Film... Neustart erfolgt einfach mit gotoAndStop.

Das Doppelposting war, weil es ja jetzt ein anderes Problem ist, dass mit clearInterval nicht wirklich was zu tun hat.....

Gruß
Cendri
Liebe Grüße

Cendri

******************************
Geändert von Cendri am 25.03.05 um 14:05 Uhr

 
nicht sichtbar für Mitglieder
 25.03.2005, 09:40Re7
Benutzerbild von Nemo
Beiträge: 2331
Wohnort: Austria
Registriert: Jan 2003

<<<
Neustart erfolgt einfach mit gotoAndStop
>>>

Jupp und das ist eben nicht genug. Du musst alle Variablen zurücksetzen:

delete _root.richtigeAntwort;
delete _root.punktestand;

Sonst werden sie beim 2ten mal falsch ausgewertet.

LoadMovieNum wäre aber sicher bequemer, aber auf keinen Fall loadMovie verwenden. Deine _root. Variablen würden dabei nicht überschrieben...

----------------------------
Dimidium facti, qui coepit, habet.
----------------------------
Dimidium facti, qui coepit, habet.
 25.03.2005, 10:25Re8
Benutzerbild von Cendri
Beiträge: 27
Registriert: Mar 2005

Themenautor/in

Hallo ,

hab jetzt im ersten Frame der Szene folgendes AS eingebaut:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
delete punktestand;
delete richtigeAntwort;
delete n;
delete myInterval;
delete weiter1();
delete weiter2();
delete weiter3();
delete weiter4();
punktestand = 0;
n = new Number();
var n = 1;
loadVariables("frage1.txt",this);


Das Problme besteht aber immer noch. Ich hab die fla mal gezipt und unter

http://multimedia.et-inf.fho-emden.de:10089/hhds.zip hochgeladen. Könnt ihr sie euch ja mal angucken. Vielleicht findet ihr ja ne Lösung. Ich bin schon total frustriert.  Das Quiz befindet sich übrigens in der Szene "quiz".

Die swf könnt ihr euch unter http://multimedia.et-inf.fho-emden.de:10089 mal angucken.

Danke schonmal..

Gruß
Cendri

Liebe Grüße

Cendri

******************************
 25.03.2005, 10:31Re9
Benutzerbild von Nemo
Beiträge: 2331
Wohnort: Austria
Registriert: Jan 2003

delete myInterval;

Geht nicht, die korrekte definition lautet:

myInterval = setInterval(function() {
trace("hi");
}, 1000)

clearInterval(myInterval)

----------------------------
Dimidium facti, qui coepit, habet.
----------------------------
Dimidium facti, qui coepit, habet.
 
nicht sichtbar für Mitglieder
 25.03.2005, 10:57Re10
Benutzerbild von Cendri
Beiträge: 27
Registriert: Mar 2005

Themenautor/in

Also , wenn ich die Funktionen direkt in setInterval einfüge, geht gar nichts mehr.

Ich weiß daher nicht wirklich was du meinst....

Gruß
Cendri
Liebe Grüße

Cendri

******************************
Geändert von Cendri am 25.03.05 um 10:58 Uhr

 
Themen
Ähnliche Beiträge zum Thema
 
Lesezeichen
Neues Thema anlegenRegistrierenLogin Seite1 2

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.
Partner Webseiten: DesignerInAction.de | Designnation.de | Flashstar.de | Flex UG | Mediengestalter.info | php-resource.de | phpforum.de | phpwelt.de | Pixelio.de | PSD-Tutorials.de | Tutorials.de

Haftungsausschluss - Datenschutzerklärung - Hier Werben - Impressum
© Sebastian Wichmann - Flashhilfe.de - 1999-2010