Chrono Uhr

Taft

Mitglied
Hey Leute, ich hoffe bei euch ist alles klar...

seht euch doch bitte mal das hier an:

http://www.eta.ch/swisslab/7750/7750.html -----> unten auf Functions klicken!

Kann mir einer sagen wie das gemacht wird, mit der Zeit an sich hab ich keine Probleme. Was mir schwirigkeiten macht ist die Start/Stop und Reset Funktion bei dem ganzen....

Schon mal was ändliches gesehn oder gemacht? Bin froh für jede Hilfe!
 
Was willst du genau haben? Ich hoffe ich habs richtig verstanden und versuche mal zu erläutern:
Die Umsetzung mit den Buttons ist warscheinlich ungefähr so, dass 2 Objekte auf der Stage sinst. Eines ist Start/Stop und das andere Reset.
Beim Klick auf Start wird die aktuelle Zeit in einer globalen Variabel gespeichert(zumindest würde ich das so machen, da Intervalle auf Größeren Zeitraum doch eine gewisse Abweichung reinbringen). Weiterhin startet Start ein Interval, was links aus der momentanen Zeit und der gespeicherten Zeit die Stellung der Zeiger bestimmt. Ein weiterer Klick auf Start/Stop fragt ab, ob die Uhr läuft, und beendet das Intervall, was links die Zeiger aktualisiert. Der Reset Button macht nichts anderes als die global gespeicherte Start-Zeit auf die momentane zustellen, was dafür sorgt, dass beim nächsten Aufruf des Intervals die Zeiger bei 0 starten. Aber falls man schon vorher mit Stop das Interval beendet hat, sollte man zur Sicherheit mit dem Reset auch noch einmal die Zeiger korrekt ausrichten.
 
Naja - ich würde zuerst einmal probieren einen Sekundenzeiger für die aktuelle Uhrzeit zu animieren (per Interval oder ENTER_FRAME und dann über die rotate-Eigenschaft. Pro Sekunde um 60 / 360° drehen).

Dann in Abhängigkeit vom Sekundenzeiger den Minutenzeiger um entsprechende Grade drehen (ich glaub pro 60/360 um 60/(60/360) Grad) und dann einen Stundenzeiger analog nochmal 60/x.

Dann über einen Button das ganze aktivieren und wie SCIPIO gesagt hat die Startzeit irgendwo speichern - und dann nicht mehr die aktuelle Uhrzeit wie oben beschrieben anzeigen sondern die Differenz zwischen der gespeicherten Startzeit und der aktuellen Zeit.

Wenn du willst kann ich dir einen Sekundenzeiger als Beispiel anfertigen, Minutenzeiger und so solltest du dann aber selber machen (willst schließlich auch was lernen, was? :) ).

Gruß
jens
 
Danke Leute für die Antworten, bin damit schon ein bischen weiter gekommen!

Wie gesagt, die Uhr an sich, das heisst, Sekunden-, Minuten- und Stunden-zeiger sind kein Problem, ich hab nur probleme mit der "Stopuhr" (Chrono). Starten tut das Ganze, nur anhalten kann ich es nicht, von reseten wollen wir gar nicht reden... :(


Hier wäre mal die Beispieldatei...

Wenn du willst kann ich dir einen Sekundenzeiger als Beispiel anfertigen, Minutenzeiger und so solltest du dann aber selber machen (willst schließlich auch was lernen, was? :) ).

Ich wäre überglücklich wenn du das mir das machen könntest!!
 

Anhänge

  • chrono.zip
    386 KB · Aufrufe: 25
Code:
var esLauft = 1;

startStop.onRelease = function ():Void  {
    startStop.onEnterFrame = function ():Void  {
        if (esLauft == 0) {
            sek_chrono._rotation += 0.25;
            startStop.gotoAndStop (2);
        }
    };
    esLauft=(esLauft==0?1:0);
};
reset.onRelease=function():Void{
    esLauft=1;
    sek_chrono._rotation =0;
    startStop.gotoAndStop (1);
}

Ich kenn mich nicht so mit AS2 aus, mein Ding ist eher AS3, jedoch sollte dich obiges weiterbringen.
 
Danke SCIPIO-AEMILIANUS..

Ich habe es mitlerweile auch selber hingekriegt, war ein richtiger Krieg, ich hatte noch nie so viel Probleme mit AS2...
Dein Code funktioniert auch einwandfrei und ist erst noch eleganter als meine lösung :D

jetzt mach ich mich noch ans reseten und dann bin ich durch *erleichtert*
 
Kleiner Tipp:

esLauft=(esLauft==0?1:0);
bezweckt das selbe wie
esLauft = !esLauft;

Wenn man nur 0 und 1 nimmt sind bool'sche Ausdrücke normalen Number-Variablen vorzuziehen - die nehmen auch viel viel weniger Speicher in kauf und sind einfacher zu benutzen. if(eslauft == 1) wird zu if(eslauft) und if(eslauft == 0) wird zu if(!eslauft) usw. So kann vieles vereinfacht und besser gemacht werden.

Zu dem hier:
Code:
 startStop.onEnterFrame = function ():Void  {
        if (esLauft == 0) {
            sek_chrono._rotation += 0.25;
            startStop.gotoAndStop (2);
        }
    };

Je nach Leistung des PCs vergehen Sekunden mit diesem Code langsamer oder schneller, da "Frames" nicht wirklich für voll genommen werden können. Die werden sehr schwankend dargestellt, mal sindes 24fps, mal nur 13 wenn der Computer nebenbei noch irgendwas anderes macht. Ihr bewegt zwar schon den Zeiger, nur halt nicht entsprechend der vergangenen Zeit. Das ist nicht so gut.

Ihr solltet irgendwo schon wirkliche Zeiten in euren Codes verwenden, sei es nun über ein Date oder Timer-Objekt oder über einen Interval. Im Anhang hab ich mal ein Beispiel angehängt, das die Date-Klasse verwendet. Wie angekündigt aber nur für den Sekunden-Zeiger. Minutenzeiger geht aber analog, nur halt 1/60 so schnell.
 

Anhänge

  • stoppuhr.fla
    51,5 KB · Aufrufe: 28
Zuletzt bearbeitet:

Neue Beiträge

Zurück