Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 09-10-2003, 11:02   #1 (permalink)
antiheld2000
Gast
 
Beiträge: n/a
diverse Intervalle und deren Ende

Hidiho. Ich versuche gerade per AS dyn. Navigationselemente zu erzeugen. Das ganze soll per attachMovie passieren. Ich möchte nun, dass sich diese Elemente nach einem bestimmten Schema aufbauen: sie sollen einblenden und der"Labeltext" soll drauftickern.
Das passiert über Funktionen, die in bestimmten Intervallen aufgerufen werden, damit das ganze noch zusätzlichen "Aufbau-Charme" erhält.
Das klappt auch alles schon (ansatzweise):
ActionScript:
  1. System.useCodepage = true;
  2. loadVariablesNum("testvars.txt", 0);
  3. //loadVariablesNum("testvars.php", 0);
  4. //--------------- Intervall Functions ---------------\\
  5. initInterval = function (id, funktion, interval, p1, p2, p3, p4, p5) {
  6.     _root.IDnr = id;
  7.     _root["dynID"+id] = setInterval(funktion, interval, p1, p2, p3, p4, p5);
  8. };
  9. killInterval = function () {
  10.     clearInterval(_root["dynID"+IDnr]);
  11. };
  12. //--------------- Blend Function ---------------\\
  13. blenden = function (art, ziel) {
  14.     switch (art) {
  15.     case "aus" :
  16.         ziel._alpha--;
  17.         if (ziel._alpha<=0) {
  18.             killInterval();
  19.         }
  20.         break;
  21.     default :
  22.         ziel._alpha++;
  23.         if (ziel._alpha>=100) {
  24.             killInterval();
  25.         }
  26.     }
  27.     trace("blendenIntervall");
  28. };
  29. //--------------- Ticker Function ---------------\\
  30. var charCount = 0;
  31. ticker = function (txt, zielfeld) {
  32.     var allChars = (txt.length+1);
  33.     if (charCount<=allChars) {
  34.         zielfeld.label = txt.substr(0, charCount);
  35.         charCount++;
  36.     } else {
  37.         killInterval();
  38.         charCount = 0;
  39.     }
  40.     trace("tickerIntervall");
  41. };
  42. //--------------- Initiate Content Navigation ---------------\\
  43. var n = 0;
  44. var gn = 5;
  45. var sY = 80;
  46. conNavi = function () {
  47.     if (n<gn) {
  48.         _root.attachMovie("mc_nav_balken", ["newBtn"+n], n);
  49.         _root["newBtn"+_root.n]._y = sY;
  50.         _root["newBtn"+_root.n]._x = 50;
  51.         _root["newBtn"+_root.n]._alpha = 0;
  52.         initInterval(random(99999), blenden, 10, "ein", _root["newBtn"+n]);
  53.         initInterval(random(99999), ticker, 200, _root["n"+n], _root["newBtn"+n]);
  54.         sY += 20;
  55.         n++;
  56.     } else {
  57.         sY = 80;
  58.         killInterval();
  59.     }
  60.     trace("conNaviIntervall");
  61. };
  62. stop();
Das Problem dabei ist, dass ich die Intervalle nach Vollendung ihrer Arbeit löschen möchte, aber irgendwie bekommen sich die Intervalle so in die Haare, dass die blenden-Funktion nicht bis zum Ende ausgeführt wird und alle andere Intervalle einfach weiterlaufen.
Nun frage ich mich, wie lös ich das, bzw. wo hab ich nen Fehler?!
Angehängte Dateien
Dateityp: zip gedoens.zip (11,3 KB, 12x aufgerufen)
  Mit Zitat antworten
Alt 09-10-2003, 12:18   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Überprüf mal die IDnr in der killInterval-Funktion. Woher kommt diese Variable? Evtl. solltest du es mal mit _root.IDnr versuchen oder der Funktion die richtige IDnr als Parameter übergeben.
  Mit Zitat antworten
Alt 09-10-2003, 13:41   #3 (permalink)
antiheld2000
Gast
 
Beiträge: n/a
hm... habe jetzt mal die funktion geändert:
ActionScript:
  1. //--------------- Intervall Functions ---------------\\
  2. id = 1;
  3. kid = 1;
  4. initInterval = function (id, funktion, interval, p1, p2, p3, p4, p5) {
  5.     _root.IDnr = _root.id;
  6.     _root["dynID"+id] = setInterval(funktion, interval, p1, p2, p3, p4, p5);
  7.     _root.id++;
  8. };
  9. killInterval = function () {
  10.     clearInterval(_root.kid);
  11.     _root.kid++;
  12. };
aber das haut auch nicht hin... irgendwie sprengt das meinen intellekt....
wie muss ich denn das anlegen, dass ich mehrere instanzen der funtionen in verschiedenen intervallen ausführen kann und diese nach ablauf wieder löschen?!
  Mit Zitat antworten
Alt 09-10-2003, 15:07   #4 (permalink)
antiheld2000
Gast
 
Beiträge: n/a
so , ich hab aufgegeben. anderer versuch:
auf nem button liegt der aufruf:
ActionScript:
  1. on (release) {
  2.     _root.portfolio = setInterval(conNavi, 125, _root.portfolio);
  3. }
nun möchte ich in der funktion die übergebene variable (_root.portfolio) das entsprechende interval löschen:
ActionScript:
  1. conNavi = function (iid) {
  2.     if (n<gn) {
  3.         _root.attachMovie("mc_nav_balken", ["newBtn"+n], n);
  4.         newName = _root["newBtn"+_root.n];
  5.         ....
  6.         n++;
  7.     } else {
  8.         clearInterval(iid);
  9.     }
  10. };
Wird aber nicht gelöscht, woran könnte das liegen?
  Mit Zitat antworten
Alt 09-10-2003, 15:23   #5 (permalink)
nky
Bontempi Punk
 
Benutzerbild von nky
 
Registriert seit: Dec 2001
Ort: Dtld/Pfalz
Beiträge: 4.185
ich lösch meine Intervalle imme rso - und das funzt auch


a=setInterval.....

clearInterval(a).....


das sollte klappen !!!

Gruss nky
nky ist offline   Mit Zitat antworten
Alt 09-10-2003, 15:28   #6 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Yo nky zustimm!!
ActionScript:
  1. move = function (mc) {
  2.     mc._x += 5;
  3.     mc._y += 5;
  4.     if (_root.move_mc._x>=200) {
  5.         mc._x = 200;
  6.         mc._y = 200;
  7.         mc._xscale += 10;
  8.         mc._yscale += 10;
  9.     }
  10.     if (mc._xscale>=300 && mc._yscale>=300) {
  11.         clearInterval(Mover_ID);
  12.     }
  13. };
  14. var Mover_ID = setInterval(move, 20, _root.move_mc);

so löscht ma sauber Intervale
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 09-10-2003, 15:37   #7 (permalink)
antiheld2000
Gast
 
Beiträge: n/a
super, aber wenn ich das clearInterval in der funktion integriert haben möchte und gleichzeitig aber die variable zum clearen dynamisch halten möchte, wie gehe ich denn dann vor?
  Mit Zitat antworten
Alt 09-10-2003, 15:47   #8 (permalink)
nky
Bontempi Punk
 
Benutzerbild von nky
 
Registriert seit: Dec 2001
Ort: Dtld/Pfalz
Beiträge: 4.185
wo ist das Problem - du kannst doch den bezeichner dynamisch wählen ....mußt ihn nur irgendwo zwischenspeichern...

noch dynamischer gehts doch schon fast gar nimma ...

könntest vielleicht ein array mit intervallbezeichnern machen ...
und die immer raus und rein poppen..
dann hättest du die volle Kontrolle ....
über die verfügbaren Bezeichner

Gruss nky


edit : zum clearen könntest du dann einfach das array durchlaufen und alle aktiven bezeichenr löschen.....ich merke gerade das man das voll fett ausbauen kann *g

Geändert von nky (09-10-2003 um 15:48 Uhr)
nky ist offline   Mit Zitat antworten
Alt 09-10-2003, 18:20   #9 (permalink)
antiheld2000
Gast
 
Beiträge: n/a
was ich aber nach euren vorschlägen (abgesehen von dem mit dem array, damit müsste ich mich erstmal länger auseinander setzen) nicht verstehe ist, dass wenn ich z.b. diese funktion
ActionScript:
  1. conNavi = function () {
  2.     if (n<gn) {
  3.         _root.attachMovie("mc_nav_balken", ["newBtn"+n], n);
  4.         newName = _root["newBtn"+_root.n];
  5.         newName._y = sY;
  6.         newName._x = 50;
  7.         newName._alpha = 0;
  8.         newName.label = _root["n"+n];
  9.         xyz = setInterval(blenden, 15, "ein", newName);
  10.         newName.onRelease = function() {
  11.             trace("RELEASE");
  12.         };
  13.         newName.onPress = function() {
  14.             trace("PRESS");
  15.         };
  16.         sY += 20;
  17.         n++;
  18.     } else {
  19.         sY = 80;
  20.         clearInterval(portfolio);
  21.         trace("ende");
  22.     }
  23. };
habe und diese funktion ruft dann 5 mal diese funktion auf
ActionScript:
  1. blenden = function (art, ziel) {
  2.     switch (art) {
  3.     case "aus" :
  4.         ziel._alpha--;
  5.         if (ziel._alpha<=0) {
  6.             clearInterval(xyz);
  7.             trace("laeuft noch");
  8.         }
  9.         break;
  10.     default :
  11.         ziel._alpha++;
  12.         if (ziel._alpha>=100) {
  13.             clearInterval(xyz);
  14.             trace("laeuft noch");
  15.         }
  16.     }
  17. };
dann bekommen sich die clearIntervals in die haare und es läuft einfach weiter. ist ja auch logisch, da xyz ja nachdem es einmal gelöscht wurde weg ist und nichts mehr gelöscht werden kann, oder seh ich das falsch?

zu der array variante: krieg ich n tipp, wie das ungefähr geht? ich hab heute keine energie mehr, darüber nachzudenken
  Mit Zitat antworten
Alt 10-10-2003, 08:39   #10 (permalink)
nky
Bontempi Punk
 
Benutzerbild von nky
 
Registriert seit: Dec 2001
Ort: Dtld/Pfalz
Beiträge: 4.185
wenn du dei intervalle verwalten willst - dann bau dir halt die entsprechende struktur ..
ich würd das ganze ungefähr so angehen

ein array mit den möglichen Intervallnamen

eine funktion zum name holen - und eine zum namen schreiben

also getItnervalName & setInterVallName

wenn du den namen holst mußt du ihn aus dem array löschen..

und wenn du iden interval löschst - dann schreibst du den "freigegebenen" namen wieder ins array....so kannst du sichergehen - das sich keine intervalle überschreiben..

evtl kannst du sogar noch ein array machen indem du die derzeit aktiven intervalle einträgst Dann fällt das löschen später leichter...

Gruss nky
nky ist offline   Mit Zitat antworten
Alt 17-12-2003, 16:04   #11 (permalink)
Neuer User
 
Registriert seit: Sep 2003
Ort: Graz
Beiträge: 36
Ergänzung

Nur der Vollständigkeit halber:

Ich hatte das selbe Problem, daß die Intervalle einfach nicht zu stoppen waren. Die Lösung ist allerdings einfach:

wenn man die Variable zur Speicherung der Intervall-ID erzeugt, ist diese natürlich nur lokal in der Funktion ansprechbar, d.h. in der Funktion wo clearInterval() aufgerufen wird, ist die Variable leer!

Das umgeht man, indem man die Variable als _global definiert.

Nur so als Beispiel ein Ablauf, der ein MC einblendet, nach 5 Sekunden wieder ausblendet und dazwischen keine weiteres Einblenden erlaubt.

ActionScript:
  1. // Stage mit 25fps
  2.  
  3. // Start der ganzen Geschichte, ev. auf einer Schaltfläche liegend
  4. if (_global.einblendenIntervall == undefined) {
  5.                 _global.einblendenIntervall = setInterval(einblenden, 40, "meinMovieclip");
  6. }
  7.  
  8.  
  9. function einblenden(objekt) {
  10.     if (_root[objekt]._alpha < 100) {
  11.         _root[objekt]._alpha += 10;
  12.     } else {
  13.         _root[objekt]._alpha = 100;
  14.         clearInterval(_global.einblendenIntervall);
  15.         _global.timerIntervall = setInterval(timer, 5000);
  16.     }
  17. }
  18.  
  19. function ausblenden(objekt) {
  20.     if (_root[objekt]._alpha > 0) {
  21.         _root[objekt]._alpha -= 10;
  22.     } else {
  23.         _root[objekt]._alpha = 0;
  24.         _global.einblendenIntervall = undefined;
  25.         clearInterval(_global.ausblendenIntervall);
  26.     }
  27. }
  28.  
  29. function timer() {
  30.     _global.ausblendenIntervall = setInterval(ausblenden, 40, "meinMovieclip");
  31.     clearInterval(_global.timerIntervall);
  32. }
__________________
Robert Niessner
LAUFBILDkommission
rniessner 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 02:39 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele