Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-10-2011, 20:52   #1 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Countdown bei gedrückter Taste

Hallo Zusammen,

ich versuche einen Zahnputztimer in Flash zu basteln und brauche dazu einen Countdown-Timer, der 3 Minuten herunterzählt, aber nur, wenn eine Taste gedrückt wird. Wenn ich die Taste loslasse, soll der Countdown unterbrochen werden und wenn ich wieder drücke soll er an der Stelle weiterzählen, wo er vorher aufgehört hat.

Ich hab mich nach diesem Tutorial gerichtet:
Countdown Timer for Flash Games (AS2) — Flash Tutorials, Flash Templates, Flash Games, Flash Casino Games - and blog!

Und dann hab ich da noch ein onKeyDown = function() rangebastelt, damit das ganze bei Knopfdruck abspielt.

Der Countdown funktioniert auch soweit, allerdings ignoriert er das 3 Minuten Intervall, das gesetzt wurde und zählt stattdessen für jeden Knopfdruck einen runter.

Hier ist mein Code:
Code:
timer = 180;

var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
    if (Key.getCode() == Key.ENTER) {
		trace ("Virtual key code: "+Key.getCode()+" (ENTER key)");
		timer--;
		if(timer==0){
			clearInterval(countdownInterval);
		}else {
        trace("Virtual key code: "+Key.getCode());
    }
	}
}
countdownInterval = setInterval(countdown,3000);
Key.addListener(keyListener);
Kann mir jemand einen Tipp geben, wie ich ihn dazu bringe in 3 Minuten runterzuzählen? Das wär großartig.

vG Cörv
Cörv ist offline   Mit Zitat antworten
Alt 31-10-2011, 10:30   #2 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Am Computer Zähne putzen, wer das mag
PHP-Code:
var countInterval:Number;
var 
timer:Number 179;
var 
d:Number 1000;
timetext.text "3:00";
//-->
k_Down = {onKeyDown:function ()
{
    if (
Key.getCode() == Key.ENTER)
    {
        if(
countdownInterval == undefined){
            
countdownInterval setInterval(runTimerd);
        }
    }
}};
Key.addListener(k_Down);
//-->
k_Up = {onKeyUp:function ()
{
    if (
Key.getCode() == Key.ENTER)
    {
        
clearInterval(countdownInterval);
        
countdownInterval undefined;
    }
}};
Key.addListener(k_Up);
//-->
function runTimer():Void
{
    if (
timer > -1)
    {
        var 
t:Number timer--;
        var 
m:Number Math.floor(60);
        var 
s:Number 60;
        
>= 10 timetext.text ":" timetext.text ":0" s;
    }

Aber nicht in der IDE testen, besser im Standalone-Player, in der IDE funzt das nicht ;-)
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 31-10-2011, 12:10   #3 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Tausend Dank.
Werds nachher gleich mal ausprobieren.

Ist ja doch ein ganzer Batzen Code. Ich dachte da würde ne Zeile zusätzlich reichen. Also dicken Dank für die Mühe.
Cörv ist offline   Mit Zitat antworten
Alt 31-10-2011, 12:32   #4 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.231
Hi,
nur am Rande| in AS3 ist das etwas komfortabler:
PHP-Code:
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.KeyboardEvent;

var 
keyDown:Boolean false;

var 
t:Timer = new Timer(1000,180);

t.addEventListener(TimerEvent.TIMERupdateTime);
t.addEventListener(TimerEvent.TIMER_COMPLETEtimerCompleteHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN,resumeTimer);
stage.addEventListener(KeyboardEvent.KEY_UP,pauseTimer);

function 
updateTime(e:TimerEvent):void
{
    
trace(180 t.currentCount+" Sekunden noch");
}
function 
timerCompleteHandler(e:TimerEvent):void
{
    
trace("FERTIG");
}

function 
resumeTimer(e:KeyboardEvent):void
{    
    if (!
keyDown)
    {
        
keyDown true;
        
t.start();
    }
}
function 
pauseTimer(e:KeyboardEvent):void
{
    if (
keyDown)
    {
        
keyDown false;
        
t.stop();
    }

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist offline   Mit Zitat antworten
Alt 31-10-2011, 13:23   #5 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Cool, denn hab ich jetzt ja sogar zwei Varianten zum Ausprobieren.

Leider sind meine AS3 Kenntnisse noch bescheidener, als meine AS2 Künste (praktisch nicht vorhanden ), deswegen muss ich mal schauen, ob ich damit klar komme.

Aber vielen Dank. Ist auf jeden Fall super Input.
Cörv ist offline   Mit Zitat antworten
Alt 31-10-2011, 15:02   #6 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
Hab das vom Andre und mir mal zusammen gemixt
PHP-Code:
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.KeyboardEvent;
//--> Variablen
var keyDown:Boolean false
var 
cD:uint 180;
var 
d:uint 1000;
timetext.text "3:00";
var 
tI:Timer = new Timer(d,cD);
//--> Listener
tI.addEventListener(TimerEvent.TIMERtH);
tI.addEventListener(TimerEvent.TIMER_COMPLETEcH);
stage.addEventListener(KeyboardEvent.KEY_DOWN,resumeTimer);
stage.addEventListener(KeyboardEvent.KEY_UP,pauseTimer);
//--> Funktionen
function tH(event:TimerEvent):void {
    var 
m:uint Math.floor((cD-tI.currentCount)/60);
    var 
s:uint =  (cD-tI.currentCount)%60
    s 
>=10 timetext.text m+":"+timetext.text m+":0"+s;
}
function 
cH(event:TimerEvent):void {
    
timetext.text "Zähne sauber";
    
tI.stop();
}
//
function resumeTimer(e:KeyboardEvent):void
{    
       
keyDown=!keyDown
        
tI.start();
}
//
function pauseTimer(e:KeyboardEvent):void
{
     
keyDown=!keyDown
        
tI.stop();

Angehängte Dateien
Dateityp: fla countDown_AS3_CS5.fla (7,5 KB, 2x aufgerufen)
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 31-10-2011, 22:06   #7 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Ja, is denn jetzt schon Weihnachten?
Ich bin platt, mit was für einem Eifer einem hier geholfen wird. Danke vielmals.

Funzen alle Varianten übrigens super, wobei die AS3 Variante natürlich cooler ist, weil sie richtig in Minuten und Sekunden zählt, anstatt einfach nur von 180 abwärts.

Allerdings muss ich meine nicht vorhandenen AS3 Kenntnisse mit in die Waagschaale werfen. Falls ich nochmal ne Funktion hinzufrickeln muss, dann funktioniert das wahrscheinlich eher in AS2, als in AS3. Mir ist zum Beispiel eingefallen, dass eine Reset-Taste gar nicht verkehrt wäre, die den Timer wieder an den Anfang setzt.

Ich bin unterdessen noch dabei zu versuchen, die erste Variante zu verstehen. Soweit bin ich gekommen:

Code:
var countInterval:Number;
var timer:Number = 179;
var d:Number = 1000;
timetext.text = "3:00";
Ehrlich gesagt bin ich hier schon überfordert. Die zweite Variable erkenne ich, dass ist die Zahl, die in dem Textfeld heruntergezählt wird. Bei der ersten und dritten habe ich überhaupt keine Idee. Die vierte definiert wahrscheinlich meinen 3 Minuten Zeitraum.

Code:
//-->
k_Down = {onKeyDown:function ()
{
    if (Key.getCode() == Key.ENTER)
    {
        if(countdownInterval == undefined){
            countdownInterval = setInterval(runTimer, d);
        }
    }
}};
Key.addListener(k_Down);
Hier wird scheinbar die onKeyDown-Funktion "k_Down" definiert. Ich wusste gar nicht, dass man das auch so rum schreiben kann.
Dann fragt er den Tasten-Code ab und sagt, wenn er gleich "ENTER" ist, dann setze das Intervall auf 3 Minuten fest, aber nur falls es vorher nicht schon festgesetzt wurde. D.h. sobald ich auf den Knopf gedrückt habe, ist countdownInterval nicht mehr undefined und er wird nicht auf 3 Minuten zurückgesetzt, sondern zählt dort weiter wo er aufgehört hat, wenn ich nochmal drücke.

Ich versteh noch nicht ganz, wie er auf die 3 Minuten kommt. Ihm wird scheinbar die Variable d übergeben. d=1000, d.h. 1000=3 Minuten?

Code:
//-->
k_Up = {onKeyUp:function ()
{
    if (Key.getCode() == Key.ENTER)
    {
        clearInterval(countdownInterval);
        countdownInterval = undefined;
    }
}};
Key.addListener(k_Up);
Wenn ich loslasse wird das Intervall gestoppt und zurück auf undefined gesetzt? Das scheint im Widerspruch zu stehen, mit dem, was ich mir eben zusammengereimt habe. Wenn ich countdownInterval auf undefined setze, müsste er doch das Interval wieder zurücksetzen, oder nicht?

Code:
//-->
function runTimer():Void
{
    if (timer > -1)
    {
        var t:Number = timer--;
        var m:Number = Math.floor(t / 60);
        var s:Number = t % 60;
        s >= 10 ? timetext.text = m + ":" + s : timetext.text = m + ":0" + s;
    }
}
Hier passiert scheinbar folgendes: Wenn timer größer als -1 ist, dann zähle abwärts. Der Rest ist mir leider noch schleierhaft, aber ich arbeite dran.
Cörv ist offline   Mit Zitat antworten
Alt 01-11-2011, 01:13   #8 (permalink)
brand new user
 
Benutzerbild von RustyCake
 
Registriert seit: May 2002
Ort: Laimbach 6 1/2
Beiträge: 16.884
SetInterval wird in Millisekunden Initialisiert, also ist 1000 eine Sekunde, das bedeutet das der Interval, jede Sekunde ausgeführt wird ;-)
__________________
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muß erst gehen lernen"
RustyCake ist offline   Mit Zitat antworten
Alt 01-11-2011, 02:20   #9 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.231
Wenn das der einzige Part deiner Anwendung ist,
versuche doch gleich den AS3-Ansatz zu verstehen - das bringt Dich auf längere Sicht einfach weiter...

Reset-Taste | AS3
PHP-Code:
resetBtn.addEventListener(MouseEvent.Release,resetTimer)
function 
resetTimer(e:MouseEvent):void{
  
t.reset();

Reset-Taste | AS2
PHP-Code:
resetBtn.onRelease = function():Void{
  
timer 180;

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist offline   Mit Zitat antworten
Alt 03-11-2011, 03:40   #10 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Der Zahnputztimer ist fertig (zumindest der Flashteil ).

Danke euch beiden nochmal vielmals.
@ andrelehnert: Danke auch für den Reset-Button.

Ich hab die SWF als Anhang mal hochgeladen, damit ihr schauen könnt, was wir gemeinsam fabriziert haben.

Es ist doch die AS2 Variante geworden. Sorry . Aber ich habs in der Kürze der Zeit einfach nicht mehr gerafft.

Ihr wisst ja, Enter drücken und er legt los und Enter loslassen und er stoppt. Mit Space könnt ihr den Timer zurücksetzen.

Außerdem gibts noch ein Easteregg (Spoiler: wenn man auf die Nase klickt).

Ich hoffe euch gefällts.
Angehängte Dateien
Dateityp: swf 111102_zahnputz-timer.swf (25,9 KB, 27x aufgerufen)
Cörv ist offline   Mit Zitat antworten
Alt 03-11-2011, 08:12   #11 (permalink)
Neuer User
 
Benutzerbild von andrelehnert
 
Registriert seit: Oct 2007
Ort: Kölle
Beiträge: 1.231
Sehr süß - keine Ursache.

Am Anfang - nach ca.1 Sekunde springt die Uhr nochmal kurz auf Null zurück,
um dann richtig durchzulaufen - ist das Absicht oder noch ein kleiner Fehler?

LG ANdré
__________________
Die Hoffnung stirbt zuletzt.
Aber sie stirbt.
andrelehnert ist offline   Mit Zitat antworten
Alt 03-11-2011, 08:48   #12 (permalink)
Neuer User
 
Benutzerbild von Cörv
 
Registriert seit: Nov 2006
Beiträge: 23
Istn Fehler, den ich leider nicht mehr gefixed bekommen habe. Ist gestern spät geworden .

Aber für jetzt kann ich damit leben.
Cörv 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS4] scroll bei gedrückter maustaste derfrederik Flash Einsteiger 6 23-04-2010 12:49
Scrollen bei gedrückter Taste krisox Flash Einsteiger 3 05-02-2007 08:35
Scrollen bei gedrückter Taste krisox Flash MX 2004 1 04-02-2007 12:05
onKeyDown bei gedrückter Taste nur einmal ausführen -Panda- Flash MX 2004 2 15-06-2005 10:44
scrollen mit gedrückter maustaste?!?! goldenice Flash MX 3 06-07-2004 12:49


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele