"We are back" « oc.at

Flash/ActionScript: Movieclip mit Countdown

Spikx 25.08.2004 - 13:29 1856 23
Posts

Spikx

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
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?
Bearbeitet von Spikx am 25.08.2004, 13:46

fleshmark

GameDev
Avatar
Registered: Aug 2000
Location: Wien
Posts: 2958
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

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
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

GameDev
Avatar
Registered: Aug 2000
Location: Wien
Posts: 2958
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

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
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

GameDev
Avatar
Registered: Aug 2000
Location: Wien
Posts: 2958
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

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
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

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
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

GameDev
Avatar
Registered: Aug 2000
Location: Wien
Posts: 2958
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.
Bearbeitet von fleshmark am 25.08.2004, 15:46

Spikx

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
achja stimmt, an getTime(); hätte ich ja eigentlich eh schon am Anfang mal gedacht :)
naja, werd' noch herumprobieren.

Jehul

Big d00d
Avatar
Registered: Nov 2000
Location: lnz
Posts: 295
hoi!

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

fleshmark

GameDev
Avatar
Registered: Aug 2000
Location: Wien
Posts: 2958
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?
Bearbeitet von fleshmark am 25.08.2004, 15:57

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 9007
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.
Bearbeitet von Umlüx am 26.08.2004, 15:44

Spikx

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
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

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 9007
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();
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz