Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 23-12-2005, 22:13   #1 (permalink)
Dumm lebt länger
 
Benutzerbild von Vampire's Party
 
Registriert seit: Jan 2004
Ort: Sachsen
Beiträge: 425
Best Practise: Countdown

Hallo,

also ich möchte nicht, dass ihr mir erklärt wie man einen Countdown macht. Ich möchte nur wissen, in welcher Weise man ihn am genauesten erstellen kann.

Mal angenommen ich habe eine Zeit von 300 Sekunden. Mit setIntervall und einem Wert von 1000 besteht am Ende eine Zeitdifferenz von 3-10 Sekunden. Das müsste daher kommen, da setIntervall an die FrameRate gebunden ist. Und wenns auch nur etwas ruckelt wirds Brühe. Also fällt onEnterFrame auch raus.

Eine weitere Idee wäre setIntervall in Verbindung mit der Systemzeit. Eine Funktion prüft bei jedem Aufruf, ob sich die Systemzeit verändert hat und, falls dies der Fall ist, zieht sie dem Countdown eine Sekunde ab. Der Wert von setIntervall muss natürlich entsprechend klein sein. Diese Variante lässt zwar keine falschen Zeiten zu (wie im ersten Beispiel) jedoch lassen sich hier bei genauerem hinsehen unterschiedliche Intervalle beim Countdown beobachten - sie sind gering aber erkennbar.

Habt ihr also eine "ultimative" Lösung für das Problem?
__________________
Blog
Vampire's Party ist offline   Mit Zitat antworten
Alt 23-12-2005, 22:57   #2 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
hmm leichte ungenauigkeiten lassen sich in flash kaum umgehen,
sonst würde es mehr gute flash-drumcomputer geben

wenn du in der funktion die von setInterval aufgerufen wird, ein updateAfterEvent() machst, läuft das unabhängiger von der framerate, aber immernoch nicht genau.
je höher die framerate, desto genauer der interval denke ich.
es heißt pro framewechsel können bis zu 10 intervalle ausgeführt werden.

wie klein ist den die kleinste zeiteinheit die du brauchst?
onSoundComplete könnte auch noch gehen, mit einem stummen sound von exakter länge, da gibts zwar auch eine ungenauigkeit von 46,irgendwas millisekunden, aber die lässt sich vererrechnen.
michael ist offline   Mit Zitat antworten
Alt 23-12-2005, 23:12   #3 (permalink)
Dumm lebt länger
 
Benutzerbild von Vampire's Party
 
Registriert seit: Jan 2004
Ort: Sachsen
Beiträge: 425
Die Lösung mit updateAfterEvent() klingt gut. In Verbindung mit einer Überprüfung der Systemzeit sollte das schon ziemlich genau werden.

Einen extra Sound möchte ich dafür nicht einbauen - im Moment zählt jedes Byte

Aber eine Genauigkeit von 50 Millisekunden würde mich schon zufrieden stellen. Ich denke mal, dass das menschliche Auge diese Differenz nicht bemerken würde...

Edit: FrameRate liegt bei 24 FPS
__________________
Blog

Geändert von Vampire's Party (23-12-2005 um 23:14 Uhr)
Vampire's Party ist offline   Mit Zitat antworten
Alt 24-12-2005, 00:27   #4 (permalink)
Zurückgekehrt
 
Registriert seit: Nov 2005
Ort: Berlin
Beiträge: 84
klingt theoretisch sehr spannend nur würde das Noobs eher helfen, das Ganze mal in Form von AS Code zu sehen.

Gruss
__________________
Grüße aus Berlin.
PS: Wenn ihr Problematiken zu Actionscript mit PHP habt, bitte involviert mich. Da interessiert mich alles.
c8n8b1s ist offline   Mit Zitat antworten
Alt 24-12-2005, 09:21   #5 (permalink)
Dumm lebt länger
 
Benutzerbild von Vampire's Party
 
Registriert seit: Jan 2004
Ort: Sachsen
Beiträge: 425
Hier geht es ja allein um die Theorie
Etwas Vorstellungsvermögen sollten auch Anfänger mitbringen.

Frohes Fest
__________________
Blog
Vampire's Party ist offline   Mit Zitat antworten
Alt 24-12-2005, 09:52   #6 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
ich habs letztens mit getTimer() gemacht.
die 'original'/'init'-zeit und die zielzeit kommen vom server, und dann wird jedem oEF / interval die differenz (getTimer()) abgezogen..

so lässt sich ohne 'kriminelle energie' relativ wenig manipulieren.

gruss
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 24-12-2005, 09:59   #7 (permalink)
Dumm lebt länger
 
Benutzerbild von Vampire's Party
 
Registriert seit: Jan 2004
Ort: Sachsen
Beiträge: 425
Die Zeiten kommen auch bei mir vom Server. Die Systemuhr würde ich nur benutzen um festzustellen, ob sich der Sekundenwert verändert hat.. dürfte also nicht manipulierbar sein, wenn man die Systemuhr nicht anhalten kann.
__________________
Blog
Vampire's Party ist offline   Mit Zitat antworten
Alt 24-12-2005, 10:00   #8 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
die systemzeit anhalten ? wie meinst das ?
um manipulationen 'zu erschweren' must du schon versuchen unabhängig von der client-zeit zu rechnen...
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 24-12-2005, 10:04   #9 (permalink)
o_0
 
Benutzerbild von DoTheSinWave
 
Registriert seit: Apr 2005
Ort: zuhause
Beiträge: 79
Ich hab das Problem mit getTimer() gelöst - ist (glaube ich) am genauesten.
also zB:
PHP-Code:
getTimer()
zeitlimit 300
onEnterFrame 
= function(){
    
t2=getTimer()-t
    
if (t2/1000>zeitlimit){
        
trace("countdown abgelaufen")
    }

__________________
Ich war traurig weil ich keine Schuhe hatte, bis ich einen sah, der keine Füße hatte

Geändert von DoTheSinWave (24-12-2005 um 10:07 Uhr)
DoTheSinWave ist offline   Mit Zitat antworten
Alt 24-12-2005, 10:17   #10 (permalink)
Dumm lebt länger
 
Benutzerbild von Vampire's Party
 
Registriert seit: Jan 2004
Ort: Sachsen
Beiträge: 425
Zitat:
Zitat von the binary
die systemzeit anhalten ? wie meinst das ?
um manipulationen 'zu erschweren' must du schon versuchen unabhängig von der client-zeit zu rechnen...
Flash nimmt liest die Systemzeit des Clientrechners aus - rechnet aber nicht mit dieser, sondern überprüft nur wann diese sich ändert.

@DoTheSinWave:

Auch bei dir ist der Countdown abhängig von der FrameRate... siehe oben
__________________
Blog
Vampire's Party ist offline   Mit Zitat antworten
Alt 24-12-2005, 10:25   #11 (permalink)
Neuer User
 
Benutzerbild von the binary
 
Registriert seit: Jul 2001
Ort: Berlin | Friedrichshain
Beiträge: 3.561
denke schon, wir sprechen vom gleichen, drückens nur anders aus..
mit getTimer() machst du ja genau dass..
__________________
8bm | join ff@BOINC
formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn
the binary ist offline   Mit Zitat antworten
Alt 24-12-2005, 10:51   #12 (permalink)
Dumm lebt länger
 
Benutzerbild von Vampire's Party
 
Registriert seit: Jan 2004
Ort: Sachsen
Beiträge: 425
Einverstanden
__________________
Blog
Vampire's Party ist offline   Mit Zitat antworten
Alt 03-01-2006, 19:04   #13 (permalink)
Dumm lebt länger
 
Benutzerbild von Vampire's Party
 
Registriert seit: Jan 2004
Ort: Sachsen
Beiträge: 425
So: etwas verspätet mein Ergebnis (habs wider Erwarten erst jetzt gebraucht):

PHP-Code:
function initCountdown ()
{
    
trace ("Contdown init");
    var 
started:Number getTimer();
    
_root.lastTimer  0;
    
_root.intervalID setInterval(_root.updateTimer50started);
}

function 
updateTimer(started)
{
    var 
timer:Number  Math.round((getTimer() - started) / 1000 0.5);
    
    if (
_root.lastTimer && timer _root.lastTimer)
        
trace(getTimer()+": eine Sekunde vergangen. Gesamt: "+timer);
    
    
_root.lastTimer timer;
    
updateAfterEvent();
    
    
/* Fertig
    clearInterval(_root.intervalID);
    */
        
}

initCountdown (); 
Der Countdown arbeitet mit einer Genauigkeit von ca. 20 - 70 ms (bei mir).

Kleines Problem: die Überprüfung funktioniert erst ab der zweiten Sekunde. Ein wenig unschön. Weiß jemand eine Lösung?

Grüße,
Vampire's Party
__________________
Blog
Vampire's Party 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 19:48 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele