Flash/ActionScript: Movieclip mit Countdown

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/flash_actionscript_movieclip_mit_countdown_122876/page_1 - zur Vollversion wechseln!


Spikx schrieb am 25.08.2004 um 13:29

Also ich hab ein MovieClip mit 4 Frames, wo sich folgendes Script befindet:

Frame 1: nix (damit keine Variablen initalisiert werden)

Frame 2:

Code:
_global.time;
_global.date1;
date1 = new Date();
time = 20;
Frame 3:
Code:
date2 = new Date();
if(time>0) {
   if(date2.getSeconds()>date1.getSeconds()) {
      time--;
      date1 = new Date();
   }
} else {
   _root.gotoAndPlay(21);
}
Frame 4:
Code:
gotoandPlay(3);
Aus irgendeinem Grund bleibt das ganze aber manchmal völlig zufällig hängen (also bei keinem bestimmten Zählerstand), passiert ungefähr bei jedem 3. bis 4. Versuch (bis jetzt).

Hat irgendwer Ahnung, warum das passiert, bzw. wie man das ganze optimieren könnte, damit das nicht mehr passiert?


fleshmark schrieb am 25.08.2004 um 13:39

hast schonmal debug laufen lassen und gschaut wo er genau hängen bleibt? hilft einem meist weiter. denk mal mit hängenbleiben meinst, dass er immer wieder auf frame3 zurückspringt, stimmts?


Spikx schrieb am 25.08.2004 um 13:44

ah.. moment, i weiß schon... mei Script hat ja an fatalen Logikfehler... Sekunden werden ja nur von 0 bis 59 gezählt, also wenn eine der dates über 59 hinaus is, fängts ja wieder bei 0 an und dann wird die Bedingung um time--; auszuführen eine längere Zeit lang nicht true sein.

arrgl :D

Wie realisiert man so einen Countdown anders?


fleshmark schrieb am 25.08.2004 um 13:58

ich hab auch gar nicht recht kapiert, was du mit dem skript genau machen willst.

vielleicht hilft dir das tut weiter:
http://www.kirupa.com/developer/mx/countdown.htm

was genau magst du jetzt erreichen?


Spikx schrieb am 25.08.2004 um 14:01

einfach eine einzige Variable bis 0 runterzählen lassen im Sekundentakt :)
Ja ich schau mir das mal an, aber das Beispiel dort is für meine Bedürfnisse schon viel zu kompliziert.


fleshmark schrieb am 25.08.2004 um 14:42

fps vom movieclip auf 1 stellen und pro frame eins abziehen? :) also immer timer-- und wieder auf den gleichen frame zurückspringen lassen? ;) einfacher gehts wohl kaum, denk ich mir.


Spikx schrieb am 25.08.2004 um 14:47

naja, aber da dauerts dann ja auch scho 1 Sekunde, bis er auf den Frame springt, wo die Variablen initialisiert werden.

//obwohl... egal, ich mach's doch so :)


Spikx schrieb am 25.08.2004 um 14:54

arr.. blödsinn, so funktioniert das (scheinbar) nicht... ich kann ja scheinbar nicht für den MovieClip andere FPS definieren, als für das FlashMovie, wo' drin is.


fleshmark schrieb am 25.08.2004 um 15:26

Zitat von Spikx
arr.. blödsinn, so funktioniert das (scheinbar) nicht... ich kann ja scheinbar nicht für den MovieClip andere FPS definieren, als für das FlashMovie, wo' drin is.

dass du das nur für die ganze fla definieren kannst, war mir klar, aber interessant wäre ob es funktioniert, wennst ein eigenes swf-object machst für den counter und den dann in eine fla mit einer anderen fps einbindest, aber wird wohl auch net gehn bzw. wird der counter wohl auch mit den fps der haupt-fla laufen - hmm :(
hab nicht gewusst, dass du da noch einen ganzen film rundherum machen willst, hätt dacht du brauchst nur den zähler :p

edit:
http://www.macromedia.com/support/f...tionary376.html

gettimer() ist die lösung, du hast die laufzeit des movies, dh. die musst dann einfach von zb. 20 abziehen :) auf sec converten vorher halt.


Spikx schrieb am 25.08.2004 um 15:45

achja stimmt, an getTime(); hätte ich ja eigentlich eh schon am Anfang mal gedacht :)
naja, werd' noch herumprobieren.


Jehul schrieb am 25.08.2004 um 15:46

hoi!

wieso nicht einfach die zeit-variable mit den fps multiplizieren?
timer=20*21 /* sekunden * fps */
und dann immer -1 rechnen?


fleshmark schrieb am 25.08.2004 um 15:54

naja es würd so gehn, wenn das movie mit bsp 50fps läuft und du von 20 runterzählen willst, dann müsstest

a = 20*50
jedes frame a-1
und alle 50 frames immer die textausgabe aktualisieren mit a/50. (laienhaft gesagt)

würd auch gehn.. :)
so hast dus ja gemeint, oder?


Umlüx schrieb am 26.08.2004 um 15:41

warum machst das über frames und ned mit setInterval? da kannsts auf millisekunde genau steuern.

schreibst dein code in eine funktion XY und mit
setInterval(XY, zeit in ms) kannst sie periodisch aufrufen und wenn fertig bist mit clearInterval wieder stoppen. steh eh schön in der hilfe.


Spikx schrieb am 26.08.2004 um 15:58

Zitat von Umlüx
warum machst das über frames und ned mit setInterval? da kannsts auf millisekunde genau steuern.

schreibst dein code in eine funktion XY und mit
setInterval(XY, zeit in ms) kannst sie periodisch aufrufen und wenn fertig bist mit clearInterval wieder stoppen. steh eh schön in der hilfe.
ah, thx
fragt sich nur, wie man in der Hilfe zu dieser Information gelangt :)


Umlüx schrieb am 26.08.2004 um 16:07

so etwa:

Code:
var time = 20;  
var timer;  
timer = setInterval(countdown,1000);  
stop();

function countdown() {  	
  if(time-- == 0) {  		
    clearInterval(timer);  		
    gotoAndPlay(20)  	
  }  
}

nach 20 sek. springts ins bild 20

wenns den stand noch wo anzeigen willst brauchst noch ein dynamisches textfeld und in der funktion

textfeld.text = time;
updateAfterEvent();




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025