ActionScript 3.0 :: Removing EventListeners When Unloading?
Aug 19, 2009
I have main.swf and content.swf. I load content into main. When I try to unload it gives me error, due to the fact that in my content.swf I have MouseMove event and this event is causing this error:
ActionScript Code:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at content_fla::MainTimeline/onLoop()
How to properly kill all eventListeners?
My main.swf code:
ActionScript Code:
var holder:Sprite = new Sprite();
addChild(holder);
[Code].....
I did some research and it seems quite an issue - especially when trying to remove, enterFrame, mouseMove or stage listeners. Im using CS3.
Is there anyway through which we can know that which event listeners are currently active and we can remove them at runtime? I am trying to create drawing board which have different shapes to draw. But I have to add event listener with for every shape and have to remove previous listeners. I want to remove the all active listeners in one go. Is it possible.??
First shortly about how my site works: When a link is clicked it checks if something is already displayed in either the Left or Right side of the screen (the website looks like a book, so I have a left page I want to display information on and a right page). If there is already something showing it hides it and displays the new object, together with this it enables all the buttons within that object (I have separate functions to set up each object).
What I'm trying to do is to remove all the previous set EventListeners without having to create separate functions for removing the links inside every object as well.
How do I remove all EventListeners on all objects inside another object? The only variable I want to store is the object containing everything. There are however not always EventListeners within the objects.
I am trying to improve the performance of a mobile application and I am trying to trouble shot what part of my code/application is causing a performance problem on some mobile/tablet devices. The application has several frames, with anywhere from 3 to 15 event listeners in a frame. At first I was not removing an event listeners. Now I am removing the event listeners as the user leaves the page.[code]I was wondering could removing too many event listeners cause performance issues? Also, is there a an easier, more efficient way to remove event listeners?
Let's say I have a global SoundChannel object, and inside a function I am repeatedly creating new instances of the Sound object to play songs one after the other. Each time I do this, I need to add a new eventListener to the SoundChannel to call the function 'onSoundComplete' that will load the next song on completion.Coming from a strict C++ programming background, I often wonder if it's necessary to do some kind of cleanup in Flash, or if it handles it automagically.Here's example code that specifically removes the eventListener from the previous Sound object everytime a new one is created, but I don't want to be doing this if it isn't necessary:
Code: // Setup sound object buffer var slc:SoundLoaderContext = new SoundLoaderContext(3000);
I have images loading from an array. A slideshow. This works fine, but they pile on top of each other. I cannot figure out how to remove them. what's the simplest way to remove them? How do I say - if pic1 is loaded, before loading pic2, remove pic1?
Code:
var aPics:Array=new Array("pic1.jpg","pic2.jpg","pic3.jpg","pic4.jpg","pic5.jpg"); var threeSeconds:Timer=new Timer(3000,aPics.length); threeSeconds.start();
Trying to add EventListeners to Bitmaps.Can I add an EventListener directly to a bitmap?If I load an image to a UILoader then addEventListener to the UILoader instance that works just fine, but if I use a Bitmap instead, nada...I could load the Bitmap into a Sprite and add the EventListener to that, but would prefer the direct method...
Is there a way to listen for the cursor in the input text field? I am making a form, and when the user clicks on the input box I want text to appear to the right side and than fade when they leave that text field.
the text field is called input_txt;
psuedo code
input_txt.addEventLister(event.MouseEvent, showText); function showText(evt:MouseEvent):void{ text_mc.visibile = true; }
I'm working on an image gallery which builds dynamically at runtime, simple enough.imageList is an array loaded with the images to display.
var imageList:Array = _root.images.split(",");var imageArray = new Array();var count = 0;for( var i = 0; i < imageList.length; i++ ){ _root.createEmptyMovieClip("myMC"+i, (i + 1)); _root["tmpMCL"+i] = new MovieClipLoader(); imageArray[i] = new Array(); ima
Inside a .fla file I have some buttons and each button will tween a different image to the stage. All the images are outside the stage in the same x and y position and I just need to tween the x coordinate.
Now I'm working with an external document class where I'm trying to hold all my functions and I'm stucked with the Tweens. I'm willing to stay away from the flash tween engine and I'm trying to work with tweenLite.
Is it possible to pass parameters through eventListeners so I can use something like this inside my docClass?
public function animeThis (e:MouseEvent, mc:MovieClip, ep:int):void { //ep stands for endPoint. TweenLite.to(mc, 2, {x:ep}); }
If this is possible, how am I supposed to write the listeners so it will pass the event to be listened for AND those parameters? And how to build the function so it will receive those parameters and the event?
I've got a few MouseEvent listeners outside of a function that contains nested functions that need to use the functions attached to the listeners.
button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); function navigation (): void { if statements;
[code]....
I keep getting an "1120:Access of undefined property buttonOver" error. I know it's because the EventListener is outside of the function "navigation" but I need it to be accessed by other functions later.
I tried using a .enabled = false; when I already had a click event on that movie clip. I found that you need to remove the eventlistener instead of making enabled false.Why doesn't enabled work when you have event listeners?I'm really more curious than in need of an answer since removeEventListener worked fine.
I have a menu with buttons on the stage that when clicked load external swf but the problem, although i can remove them from the stage, is that they are still playing which gives my site performance problems. I gave weak references to the Event Listeners but i didn�t remove them.Here�s the code:
Code:stage.addEventListener(KeyboardEvent.KEY_UP, reloader); function reloader(e:KeyboardEvent):void {[code].....
and this:
Code: var reloadT:Timer = new Timer(2000, 2); reloadT.addEventListener(TimerEvent.TIMER, on_timer); reloadT.start();[code].........
So I have a code that tracks Key_UP and one for a timer. However, I want to somehow use them together, like inside each other: ex. Run the timer function in Key_UP.I want to trigger the timer only if Key_UP is found. How would I do this?
Right now I'd also like to call that same function using the ENTER from a keyboard since loginOnClick doesn't use the parameter received (event:MouseEvent). So I did this:
Code: function keyboardListener(event:KeyboardEvent):void{ if (loginButton){ if (event.keyCode == Keyboard.ENTER && loginButton.enabled) { loginOnClick(); // Generates an error because it doesn't have a parameter. } } usernameTextField.addEventListener(KeyboardEvent.KEY_DOWN,keyboardListener);
Problem is, of course, AS3 doesn't let you call a function with the incorrect number of parameters or types. I tried following senocula's tutorials on functions and parameters but they don't seem to work on this very specific issue considering the parameter is an event reference.
I am creating a small image gallery and I am creating the actual images dynamically. The images are stored via json and I am listing them underneath each other. No I can get all to work and they all load and position each other correctly underneath. What I would like to do is assign each image a addEventListener so that when clicked they pass the necessary details onto another function which will then display a larger image simple and basic but I am having trouble with adding the eventlistener. each one gets an eventlistener to it but when clicking on each one they all show the details from the last one. The code is attached to the main gallery container is as follows:
I want to know if there's a 'correct method' in removing a MovieClip off the stage. I am currently programming in simple OOP and I have 2 classes, for now lets relate them to Tree and Fruit. The fruit is the child of the tree.
When the fruit is being clicked on. the tree AND the fruit will fade off and I will perform a removechild only on the tree. So I'm now puzzled if just removing the tree would automatically remove everything including the fruit(without performing a proper tree.removeChild(fruit)) and all the eventlisteners attached to fruit?
If not, must I perform remove child on every single MC/Sprite I have added onto tree/fruit for the best performance? Would like to find out how you go about doing it the 'correct way'.
i need to attach an event listener, and have its handler have a variable passed into it ..this possible?
Code: mc.addEventListener(Mouse.Event.ROLL_OVER, over(obj) ); function(e:MouseEvent,obj:Object):void{ e.removeEventListener(....); trace(obj); } .. sommint like that .. as3 says function is static, missing argument etc .. there may be other ways about it - but it is crucial to my setup, as when the EL is added, the object passed is only obtainable at that point.
I have created 4 classic text objects and called them Butt1 thru Butt4.This is so I can change the text in code from time to time.I want to create an event listener to pick up when the user;
a) mouses over Butt1, etc.
b) mouses out of Butt1, etc.
c) clicks on Butt1, etc.
In each case I will define a function to perform actions when the button is moused over, moused out or clicked.AddEventListener(MouseEvent.CLICK, clickHandler); does not seem to have parameters(as far as I can tell)to point to Butt1, etc.
I've got a presentation that continually reads an XML and displays content based on that. It works fine for 2-3 hours then just stops. No errors, just stops.
What I'm doing is adding and removing eventListeners throughout the process using two alternative loader objects.
I am trying to remove an event listener on a FileReference object by calling a function, but it seems not to be removed, and I do not understand why.
Here is the code: private function clearFileUploadListeners(file:FileReference, index:String):void { var dispatchEvent:Function = function(event:Event):void { dispatch(event.type, event, index); }; file.removeEventListener(Event.COMPLETE, dispatchEvent); var bool:Boolean = file.hasEventListener(Event.COMPLETE); if (bool) trace("ERROR"); }
When I run this code, the trace actually happens. I don't understand why this boolean returns true, when I just tried to remove the eventListener just above! I believe it has to do with the fact that the dispatchEvent function is defined inside another function when I add the listener:
private function upload(file:FileReference, index:String):void { var dispatchEvent:Function = function(event:Event):void { dispatch(event.type, event, index); }; file.addEventListener(Event.COMPLETE, dispatchEvent); }
The problem is that I need to access this "index" variable from the listener, and I can't set it as a global variable as each file has it's own index and it's a burden if I have to extend each event class to keep track of the index (Event, ProgressEvent, ..). I actually found a temporary solution, I am not sure if it is the best! I put my removeListener method actually inside the upload method, but made it a variable. As AS3 allows dynamic object, I attached this method to one of my object, and so I just call the reference to the method when necessary. The event is actually removed.
public function doAddItem(itemConcepto:int):void{ modalCfd = new modalCFDItems(); modalCfd.addEventListener(Event.CLOSE, closeHandler); modalCfd.addEventListener("addItemResult", addItem_resultHandler); modalCfd.addEventListener("addItemResize", addItemResize_resultHandler); [Code] ..... Does that do it, or do I have to removeEventListener explicitly?
I'm in the very early steps of creating a game. I have a character on the stage and have it so that the user clicks the character to select him and then clicks else were on the stage to set a path. The second click in the same spot makes the character walk to that spot and resets the whole thing to do it again.
The selecting the character was the last thing I added in and has caused this error to come up somewhat randomly:
I've been thinking about how the garbage collection work for a while now and have to ask if its necessary to removeEventListeners before you null a class like this:
ActionScript Code: var _nc:NetConnection; function init():void {
[Code]....
Obviously I can skip the removeEventListener but will it affect the memory usage if I don't remove it?
I'm trying to assign Event Listeners to buttons in an array and increment the function referenced in those listeners by 1 so the functions have unique names, is this possible?
ActionScript Code: //ROLLOVERS FOR MENU var btnsAry:Array = [hs1_mc, hs2_mc, hs3_mc, hs4_mc, hs5_mc, hs6_mc]; function setButtons():void { for (var i:int=0; i<btnsAry.length; i++){ btnsAry[i].id = i; [Code] .....