Actionscript 3 :: Using Enter_Frame As A Timer Flash
Jan 15, 2010
I am trying to save memory and space. So instead of using the Timer for my application, I was thinking about using my main loop (ENTER_FRAME) to keep track of time that passes. Is there anything wrong about this ??
I was wondering, why does weak references does not work fro Enter_Frame and Timer? I mean, when I add any event listener on an object for those events I must remove them later, that is annoying! I use this:
When I lose reference to objects with these events (removeChild or null it) the event continues to happen and the 'myevent' func continues to be called :/Am I doing something wrong? What would be a good solution for this?
I have been trying to add a child (ball) randomly on stage with a timer every certain time or with ENTER_FRAME, but I can't get it to work. In both cases it just add the first one and then stops, even though the timer keeps on working!
I have been trying to add a child (ball) randomly on stage with a timer every certain time or with ENTER_FRAME, but I can't get it to work. In both cases it just add the first one and then stops, even though the timer keeps on working!
Here is the code: //Classes import com.greensock.*;
There are a few fairly intensive procedures the class goes through, which require me to stagger out the action taking place. That is to say, if I were to use recursion, there are times when I'd easily hit a stack overflow, so to compensate I'm avoiding recursion through recording information in class level variables and running through the routine again (and again and again) on an ENTER_FRAME event.
This all works great, and I'm happy with the result. The only annoying bit is that performance is better when the frame rate's higher (and slower when it's lower). Run the class at 30fps, and the time it takes to complete is significantly slower than at 120fps. No surprise there, but still annoying since I'm not interested in making the user make changes in their framerate to accomodate the class.
So I considered switching to a timer-based method, but then I remembered something about the Timer class accomodating the framerate of the SWF. Looking it up confirmed what I remembered:
...if a SWF file is set to play at 10 frames per second [fps], which is 100 millisecond intervals, but your timer is set to fire an event at 80 milliseconds, Flash Player will fire the event close to the 100 millisecond interval.
Now I'm wondering if it's even worth the effort, since it would appear that the end result would be much the same as it is now using enter frame.
I use 2 options when i comes to animationg objects with Action Script
1. Timer based animation
PHP Code:
initTimer = new Timer(1000/fps); initTimer.addEventListener(TimerEvent.TIMER, moveItem);
[code]....
2. ENTER_FRAME event based animation
PHP Code:
var time:int = getTimer(); addEventListener(Event.ENTER_FRAME, moveItem); function moveItem(event:Event){
[code]....
Both of this options work ideal for my needs and they produce smooth animation. My question is witch one is better and why? And is there more ways to animate objects with action script?
I am working on a very simple game in Flash. I want to make all the animations framerate agnostic, so that I can change the framerate without affecting the flow and speed of the game.I read somewhere that if you want to do that, you simply create a Timer object and attach an event listener to this timer.
What if I have many objects that have to listen to the same timer? See the code to understand what I am trying to do. At this stage nothing breaks, but the event does not fire.Here is the Main class, the one that runs on swf execution:
public class Main extends MovieClip { private static var _stage:Stage; private static var _timer:Timer;
I have a little problem while trying to get a URL on a Enter_Frame event using Flash AS3.I would like to trigger the URL request on the last frame of the movieclip.Everything works fine except that instead of getting the URL once, it keeps loading it all the time.
Result: I get hundreds of web pages opening in my browser.
Here is the code I use:
stop(); addEventListener(Event.ENTER_FRAME,my_function); function my_function(e:Event):void{ var homeLink:URLRequest= new URLRequest("http://www.myurl.com"); navigateToURL(homeLink, "_self"); }
I want to create an endless loop, 8 items moving in a circular shape. When you roll over of each item, it will stop the moving, and you should be able to click it.
I dont know what should I use, should I use Event.ENTER_FRAME or the circular shape should be in movie clip, so that when there is a mouse over event, it will stop moving?
Oh ya, I code everything in AS3, including the movement, objects etc. Something like a new class
Its been a long time since i've posted on this forum. I've always just browsed, but never had enough experience to post and answer questions.I am doing a small project for uni, and im a little stuck with some (probably simple) AS3.
To set the scene.... I have a scene, funnily enough, with 5 frames (and several layers). I have navigation buttons back---home---forward, which do not change over the length of the scene.In each frame (2-5) i have an embedded flv in a movieClip. The idea was to have a listener on the back and forward buttons, when clicked they do either nextFrame(); or prevFrame();.
However, to stop the 5 frames playing (and looping) i put in an action listener for ENTER_FRAME on the first frame (see below).My problem appears to be the time it takes for the ENTER_FRAME to fire. The timeline plays straight away, and is already on frame 2 before the enter_frame actually stops it. Can anyone suggest a reason why there is such a delay in the firing of the enter_frame event, and is there a way to solve it without putting in a gotoAndPlay(1); instead of the stop();??
Also, the forward button works, but the back button never appears to be created. Not quite sure why, as its exactly the same code, with just the names changed, and the instance names as well.
I am a newbie in ActionScript 3.0. I want to make flash application that will zoom in object when on mouse over and write same text on the screen and zoom out object a clear text when the mouse is roll out.I have a probelm, when I roll over the object it zoom in the text appers and when I roll out the object returns to the default position. But when I roll over then I rool out and roll over again (not wait until zooming out is completed) the addEventListener does not stop and text is mixed (part pf the text is from first zooming in a nd part of the text ist from second zooming in)
This is my code: //import the tweenlite packages. import com.greensock.TweenLite;
I have narrowed this error down to the following code, but i cant see the problem...
Code: ReferenceError: Error #1069: Property ENTER_FRAME not found on flash.events.Event and there is no default value. at sample_fla::MainTimeline/frameEventHandler()
ActionScript Code: addEventListener(Event.ENTER_FRAME,frameEventHandler) function frameEventHandler(Event){ var collisions:Array = collisionList.checkCollisions();
What is the difference between Timer.stop() and Timer.reset() functions because it seems that the 2 functions do the same thing? I image Timer.stop() to stop the timer and when Timer.start() is called the timer starts from where it stopped. For example, if I have a 3 sec. timer (3000 ms). If I stop the timer after 2.5 sec. and start the timer again, I would expect the timer to expire/trip within .5 sec.
I have a ActionScript 3.0 project and I have a timer that is running on 1000 millisecond intervals. I would like to delay this timer for 1500 milliseconds perform an action and start the timer again after the delay. I thought I could do this easily, but I'm having trouble, would it be better to stop the timer and perform the action and then listen for the action to be completed to start the timer again?
In my case, the timer I make doesn't reduce its time whenever a function is called. What code will I change or add in order to reduce the time in my timer? [code]At this point the timer.start(); is placed on a frame so that the timer starts as it enters the frame.
I have a one-frame .fla with script on one layer and a movie clip on another. The movie clip has an instance name of "titleBar," which moves from left to right using dynamic tweening.The tween code moves it from an X position of 200 to a X position of 820.Then I have a function called "xChange," which waits for titleBar's X value to be 820. Once it does, I'd eventually want to load an external swf but I'm just running a trace for now.Again, Here's the code.
I'm having problems designing the AI for a fighting games thats meant to have 1 player and 3 enemies. I programmed everything at once really carefully so I thought it would work without errors, I thought wrong. So I'm hoping this is down to lack of knowledge rather than lack of skill. So each of the enemies use an enter_frame listener that calls a method doAI. doAI() looks a little something like this
Code: function doAI(evt:Event):void{ var x:String;[code]........
So I don't know what the computer keeps doing, but it almost seems as if its doing both doThis() and doThat() really fast. I don't know if the problem is creating methods inside the enter_frame listener or if it keeps creating new variables (x and y) every frame, but I need all 3 cpu characters to be able to do this without me creating a different method 3 times for each of them. If you don't see anything wrong with this shall I upload the real code aswell as a link to the swf file and how they behave?
I am using the ENTER_FRAME function with Math.random to animate / simulate a random number range, as you might see in a digital voltmeter for instance.
the range goes from 12.0 to 12.9 and works good, but my problem is that i need to slow down the rate at which the numbers change.... A LOT.
Is there anyway to do this without slowing down the whole timeline???
Currently my AS is confined to the digital volt movieclip.
This is what i have:
addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler_1); function fl_EnterFrameHandler_1(event:Event):void{ var newVal:Number = 12 + (int(Math.random()*10)/10); volt.text = newVal.toString();}
I have built this web site [URL] and in it I have a scrolling text. If you go to "about" or "process" you will find a scrolling text at the bottom. On the test (if you hover over it) there are 2 arrows and if you click on any arrow the text will move one line up or down. I want the text to move up or down many lines and not only one line. To do this I need to use the ENTER_FRAME but I have tried every thing and I do not know how to do this. I wonder how to add the ENTER_FRAME to my code to be able to move all the lines up or down?. You will find the code I am using now below this text. This code work very well to scroll the text line by line (if any body wants to use it feel free to copy it).
I have all of my different assets on different layers. I have 3 graphics, and 3 blocks of text. I have also 1 more block of text which i want to be shown when the frame loads. When the user clicks on one of the graphics, the text on the screen hides and the correct text block is shown.I have tried two methods so far an neither work. This is my first attempt.
Code: addEventListener(Event.ENTER_FRAME, movieLoad); function movieLoad(event:Event) { leaseTxt.visible = false;[code].....
The buttons now work, but all of the text blocks show when the frame loads, but when i click on of the graphics, the correct actions happen (all text blocks hide, except the one I want to be shown).