Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-09-2007, 22:41   #1 (permalink)
Gargamel
 
Registriert seit: Apr 2005
Ort: Duisburg
Beiträge: 41
SetInterval Problem mit Framerate

Hallo,

ich habe ein .fla, in dem ich gerne alle 12 Minuten einen Sound abspielen möchte.

PHP-Code:
time_limit 12;
timer_interval setInterval(timer, (time_limit 60000)); 
Gleichzeitig lasse ich eine Uhr ablaufen (von 12:00 auf 00:00) und zeige den neuen Stand dann jede Sekunde an:

PHP-Code:
clock_interval setInterval(clock1000time_limit); 
Habe festgestellt, dass ich nach einiger Zeit eine große Differenz (bis zu 15 Sekunden) zwischen der abgelaufenen Uhr und dem Start des Sounds habe.

Weiterhin habe ich rausgefunden, dass sich die Geschwindigkeit der ablaufenden Uhr je nach Framerate verändert.

Gibt es da eine vernünftige Lösung für?
__________________
Code:
 
                      \_/
   m00h  (__)        -(_)-
      \  ~Oo~___      / \
         (..)  |\
   ________|_|_|__________
pebbo ist offline   Mit Zitat antworten
Alt 23-09-2007, 22:43   #2 (permalink)
class public{}
 
Benutzerbild von public
 
Registriert seit: Feb 2004
Ort: dessau
Beiträge: 1.406
schau dir ma die globale function updateAfterEvent() an
public ist offline   Mit Zitat antworten
Alt 23-09-2007, 22:48   #3 (permalink)
Gargamel
 
Registriert seit: Apr 2005
Ort: Duisburg
Beiträge: 41
Zitat:
Zitat von public Beitrag anzeigen
schau dir ma die globale function updateAfterEvent() an
Hallo,
diese Funktion rufe ich zuletzt in clock() auf. Aber clock() wird ja nur jede Sekunde aufgerufen... allerdings hängt das ja aber irgendwie mit der Framerate zusammen... ich kann sie so einstellen, dass meine Uhr schneller oder langsamer als echte Sekunden läuft.

__________________
Code:
 
                      \_/
   m00h  (__)        -(_)-
      \  ~Oo~___      / \
         (..)  |\
   ________|_|_|__________
pebbo ist offline   Mit Zitat antworten
Alt 23-09-2007, 23:19   #4 (permalink)
class public{}
 
Benutzerbild von public
 
Registriert seit: Feb 2004
Ort: dessau
Beiträge: 1.406
ja und gnénau das m acht updateAfterEvent....es aktualisiert den den interval....falls dei fps zu tief ist....wie is denn deine fps
bzw..wie schut denn dein script(die functionen die im interval aufgerufen werden) aus?

Geändert von public (23-09-2007 um 23:29 Uhr)
public ist offline   Mit Zitat antworten
Alt 23-09-2007, 23:42   #5 (permalink)
Gargamel
 
Registriert seit: Apr 2005
Ort: Duisburg
Beiträge: 41
updateAfterEvent() sorgt doch nur für eine Aktualisierung der Bühne vor dem standardmäßigen Neuzeichnen der Bühne per Framerate



Das ist aber auch gar nicht mein Problem. Mein Problem liegt darin, dass meine dargestelle 12 Minuten Uhr nicht genau 12 Minuten braucht und das ganz stark davon abhängt, wie hoch ich die Framerate einstelle.

1 Bps = Meine Uhr ist pro Minute 30 Sekunden zu langsam
12 Bps = Meine Uhr ist pro Minute 3 Sekunden zu langsam
100 Bps (die mein Rechner sicher nicht schafft) = Meine Uhr geht pro Minute grob richtig, aber es wohl auch noch n Unterschied drin, weil nach z.B. einer Stunde Laufzeit noch 15 Sekunden auf meiner Uhr zu sehen sind, aber die andere Funktion bereits durch das andere Intervall aufgerufen wird.

Edit:

ja also die eine funktion spielt eigentlich nur einen sound ab und die andere sorgt dafür, dass meine "uhr" von 00 auf 59 springt usw... jo.

Edit 2:

Ich könnte natürlich einfach in clock() den Sound abspielen, wenn das time_limit erreicht ist, aber dann habe ich immer noch das Problem, dass die Minuten nicht ECHTEN Minuten entsprechen und dass das wahrscheinlich auch noch stark vom Rechner abhängig sein dürfte!?
__________________
Code:
 
                      \_/
   m00h  (__)        -(_)-
      \  ~Oo~___      / \
         (..)  |\
   ________|_|_|__________

Geändert von pebbo (23-09-2007 um 23:53 Uhr)
pebbo ist offline   Mit Zitat antworten
Alt 24-09-2007, 03:02   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
setInterval löst keinen interrupt aus, sondern meldet eine funktion nur an, ab jetzt soll sie, wenn nichts anderes drann ist, abgearbeitet werden. somit sind zeitliche verzögerungen nach hinten möglich/zu erwarten.
was ich noch nie untersucht habe ist, wie bzw. wann wird das folgende interval gestartet? wenn die intervalzeit immer ab dem ausführen der funktion neu gesetzt wird, dann ist ein immer grösser werdender zeitversatz die logische folge.

probier halt mal folgendes:
das interval immer beenden und erst spätmöglichst neu starten unter berücksichtigung der aktuellen zeit.
siehe
http://www.seibsprogrammladen.de/fra...thmen/Interval
Zur vollen Zeit


sinngemäss, nicht die uhr nach jedem setinterval eine sekunde vordrehen, sondern immer nur die systemzeit anzeigen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (24-09-2007 um 03:06 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 24-09-2007, 14:38   #7 (permalink)
Gargamel
 
Registriert seit: Apr 2005
Ort: Duisburg
Beiträge: 41
Zitat:
Zitat von hgseib Beitrag anzeigen
setInterval löst keinen interrupt aus, sondern meldet eine funktion nur an, ab jetzt soll sie, wenn nichts anderes drann ist, abgearbeitet werden. somit sind zeitliche verzögerungen nach hinten möglich/zu erwarten.
was ich noch nie untersucht habe ist, wie bzw. wann wird das folgende interval gestartet? wenn die intervalzeit immer ab dem ausführen der funktion neu gesetzt wird, dann ist ein immer grösser werdender zeitversatz die logische folge.

probier halt mal folgendes:
das interval immer beenden und erst spätmöglichst neu starten unter berücksichtigung der aktuellen zeit.
siehe
http://www.seibsprogrammladen.de/fra...thmen/Interval
Zur vollen Zeit


sinngemäss, nicht die uhr nach jedem setinterval eine sekunde vordrehen, sondern immer nur die systemzeit anzeigen.
Also bisher starte ich ja nur zweimal je ein Interval... das eine, was alle x Minuten eine Funktion aufruft, die dann einen Sound abspielt und das andere, das sekündlich die Uhr verändern soll.

Ich habe jetzt auch überlegt, im Moment des Starts die Systemzeit zu speichern und dann davon ausgehen in einer Funktion, die in einem Intervall alle 10ms aufgerufen wird, die in dem Moment aktuelle Systemzeit zu nehmen und zu schauen, wie groß die Differenz ist und entsprechend die Uhr ändert, oder auch nicht. Würde das dann genauer sein?
__________________
Code:
 
                      \_/
   m00h  (__)        -(_)-
      \  ~Oo~___      / \
         (..)  |\
   ________|_|_|__________
pebbo ist offline   Mit Zitat antworten
Alt 24-09-2007, 14:48   #8 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von pebbo Beitrag anzeigen
in einem Intervall alle 10ms aufgerufen wird
so kann man einen rechner auch zu tote arbeiten lassen. ja probier es halt, wenn du meinst und wenn du meinen vorschlag nicht übernehmen willst.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 24-09-2007, 15:59   #9 (permalink)
Gargamel
 
Registriert seit: Apr 2005
Ort: Duisburg
Beiträge: 41
Zitat:
Zitat von hgseib Beitrag anzeigen
so kann man einen rechner auch zu tote arbeiten lassen. ja probier es halt, wenn du meinst und wenn du meinen vorschlag nicht übernehmen willst.
Ich habe dich offenbar nicht richtig verstanden. Ich kann die Intervalle doch gar nicht beenden, weil ich sie doch brauche... wie würdest du denn dafür sorgen, dass alle sagen wir mal 12 Minuten eine Funktion ausgeführt wird und gleichzeit ein Countdown von 12 Minuten auf 00:00 runterzählt? Offenbar ja nicht so, wie ich es (stümperhafterweise) angedacht hatte

Edit: Es reicht ja auch, die Funktion 2x die Sekunde aufzurufen... ich versuche mich mal...
__________________
Code:
 
                      \_/
   m00h  (__)        -(_)-
      \  ~Oo~___      / \
         (..)  |\
   ________|_|_|__________

Geändert von pebbo (24-09-2007 um 17:32 Uhr)
pebbo ist offline   Mit Zitat antworten
Alt 24-09-2007, 17:59   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
clock_interval = setInterval(clock, 1000, time_limit);
//
function clock(){
var aktuelle_zeit=getTimer(); // danach die uhr stellen
// da ist es egal, wie genau/ungenau setInterval ist.
}


timer_interval = setInterval(timer, (time_limit * 60000));
//
function timer(){
clearInterval(timer_interval);
...
timer_interval = setInterval(timer, restzeit);
/*
restzeit siehe mein link
restzeit = zeit bis zur nächsten vollen 12 minute
unter berücksichtigung, das schon zeit vergangen ist, bis dieses setInterval neu gesetzt wird. was vermutlich der zeit entpricht, warum bei dir die zeiten immer länger werden.
*/
}
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (24-09-2007 um 18:02 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 28-09-2007, 00:45   #11 (permalink)
Gargamel
 
Registriert seit: Apr 2005
Ort: Duisburg
Beiträge: 41
Kurze Info und Danke an alle Helfer

Ich habe jetzt ein Intervall, was alle 100ms eine Funktion startet, die dann die Millisekunden checkt und entsprechend die Uhr um eine Sekunde runterzählt, wenn eben diese verstrichen ist.

Läuft 1a.

Also falls noch jemand einen Blindtimer für die heimische Pokerrunde braucht...

http://www.pebbo.de/News/#Pokertimer-49

__________________
Code:
 
                      \_/
   m00h  (__)        -(_)-
      \  ~Oo~___      / \
         (..)  |\
   ________|_|_|__________

Geändert von pebbo (28-09-2007 um 00:46 Uhr)
pebbo 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 06:43 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele