I'm having a bit of a problem with the Timer function. And I'm also a
little unsure of the variable syntax to read the framerate of the
application.
I've created a custom class to allow me to easily attach listeners and
actions to components throughout my application in a centralised manner.
I've used a timer that's set to fire once per frame - which is worked
out by dividing 1000 miliseconds by the application's framerate.
Although at the moment I'm setting the framerate manually as I can't
quite figure out how to reference the application framerate dynamically.
My main problem is - that after I call a timer.reset(); before the
Timer has completed it's currentCount - the timer still fires one more
time.
I've tried a few things - had a bit of a stab at using
stopEventPropegation etc - but the syntax for that was odd and it never
worked. I tried putting in a condition for timer.running before the
actions I wanted to occur would be run - but the timer reports running
as true for one instance after I reset - not as soon as I reset it.
My code is here - it's unfinished, and has had a few things stripped
out for simplicities sake - but it should demonstrate what I'm trying
to acheive.
override protected function createChildren():void {
timer = new Timer(singleFrame, eventCeil);
thisEventCeil = eventCeil;
addListeners();
}
private function addListeners() {
switch(listenerType) {
case "mouse":
listenerTarget.hitArea = listenerHitArea;
listenerTarget.addEventListener
(MouseEvent.MOUSE_OUT, funcOutOverDown);
listenerTarget.addEventListener
(MouseEvent.MOUSE_OVER, funcOutOverDown);
timer.addEventListener(TimerEvent.TIMER,
timerTick);
break;
case "key":
trace("Key Listener Type");
break;
}
}
private function funcOutOverDown(event:Event):void {
thisEventType=event.type;
if (timer.running) {
timer.reset();
trace("terminated timer from event listener: " +
lastEventVal);
lastEventFloor = thisEventFloor;
thisEventCeil = eventCeil - thisEventFloor;
}
switch(thisEventType) {
case "mouseOut":
thisEventEaseCeil = 1;
thisEventFrom = 0;
thisEventTo = 1;
timerInit=true;
break;
case "mouseOver":
thisEventEaseCeil = undefined;
thisEventTo = 1;
thisEventFrom = 0;
timerInit=true;
break;
}
if (timerInit) {
thisEventFloor = 0;
timerInit=false;
timer.start();
}
}
private function timerTick(timerEvent:TimerEvent) {
trace(timerEvent);
if (timer.running) {
thisEventFloor = timer.currentCount;
thisEventVal = EasingLib.easeInCirc
(thisEventFloor,thisEventFrom,thisEventTo,thisEventCeil,thisEventEaseCei
l);
lastEventVal = thisEventVal;
if (thisEventFloor >= thisEventCeil) {
trace("completed timer: " + lastEventVal + " "
+ thisEventFloor);
timer.reset();
lastEventFloor = thisEventFloor;
}
}
}
The problem is - if I get an out or over event before the timer is
complete - which successfully resets the timer - it still passes the
timer.running condition.
That's annoying me - and I'm really not sure how to stop it from
occuring.
That's really the only problem I'm having at present with the code you
see - everything else seems to behave as I require it. Before I can
expand it out to cover more conditions and listeners I really need to
get a handle on the timer's behaviour.
I figured that getting the timer to fire once a frame and then process
my actions would be a nice non-CPU intensive way to handle my various
actions, animations etc.
I'd appreciate any input.
Cheers.
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/