ActionScript 3.0 :: Remove Event Listeners In Separate Handler Functions?
Sep 17, 2010
I've managed to create a button which on MOUSE_DOWN scales its parent object- it works just like windows in your OS, where you grab the corner and can change the scale of the window.
Here's how I've done it, (minus the MOUSE_DOWN listener)
Code:
function scaleDragHandler(event:Event):void {
var mcWidth:Number = event.target.parent.width;
var mcHeight:Number = event.target.parent.height;
[Code].....
However, it throws the error, "Access to undefined property 'scaleMC'" on the removeEventListener line. My thought was to put another listener for mouse up inside the first, but that sounds wrong
What I am trying to do is, if a user presses keyboard (key 1), picture 1 should FadeIn and if a user presses keyboard (key 2) picture one should FadeOut and picture 2 FadeIn and vice-versa. With the code mentioned below it works fine sometimes if I am not pressing any other key while it is performing one action but sometimes it behaves weird also. What I want AS3 to do is not to take any action or in other words it should not listen to keyboard until it finishes the opening or closing animation of a picture or any other object assigned to the key.
stage.addEventListener (KeyboardEvent.KEY_DOWN, KeyDownHandler); /**///keyboard keycode for 1 & 2var key1:uint = 49; var key2:uint = 50; var BG1:Image1 = new Image1(); var BG2:Image2 = new Image2(); [Code] .....
I have made an event listener:text0_mc.addEventListener(MouseEvent.CLICK, showMe);showMe is a function, but I need it to call more than 1 function at once i.e. -ext0_mc.addEventListener(MouseEvent.CLICK, showMe1, showMe2, showMe3, showMe4, showMe5, showMe6, showMe7);Each function contains an if statment as below.
function showMe1(event:MouseEvent):void { if (shuffledArray[1]==orderArray[1]){
import fl.transitions.Tween; import fl.transitions.easing.*; var id:Number;
[Code]....
The variable id which is declared globally is changed in the function goNext. I need the variable to retain the value, but it gets reset as the function is not returning. I tried the return method but that's not working either.
I've had this glitch for a long time, and I've tried several ways to get rid of it, and now that I just recoded everything to see if it was something I did, it's back again! basically, whenever I press space (regardless of whether or not I am listening for a space press [or any key press]), the last function fired by an event listener will run itself again, with the exact same arguments supplied to it in the first time.
For example, if I make a simple button to trace("text"); and take you to another frame. Once you get to that frame you can press Space and it'll trace "text" again! I really have no idea what's causing this, and it doesn't seem to be happening to me in new files. and there's too much code to show you, but I just want to know if anyone has heard of this before or if they have any theories to what's going on.
Basically, I want it to check if a link is assigned (image[p][1]), and if it is, create an onRelease handler for that image. (This is a rotating image slideshow).
Thus far, this code will check to see if the link is assigned and will create the onRelease handler when an image loads that has a link assigned via XML.
The only problem is, it does not remove the onRelease handler when the image rotates to the next image.[code]...
I have two classes in my project - a main class and a fancyText class. In main I create a new instance of fancyText and add it to the stage. Inside fancyText there is a timer that runs and when x time is up the fancyText fades out.
I'd like to know the best way to remove the child from main when the alpha of fancyText hits zero. Should i go down the route of adding a listener to fancyText in main, and dispatching a custom event from within the fancyText class?
I guess i could just check the child's alpha value in main and remove it when the alpha it's zero. But fancyText only gets added in a certain scenario - so i can't check it all the time - which would mean doing something like this:
Code: ... addChild(fancyText) checkFancyText = true (assuming a boolean declared earlier) ... elsewhere in main -
[Code].....
Seems like there are a number of ways to do it - I don't suppose it's possible to remove a child from main from within fancyText class? or is that space cadet talk?
I'm currently working on a nav bar but I've run into a questionable situation. There are several links in the menu, and for each i'd like a mouse event on over and on out. Do I have to specify both of these events for each link, or is there an easier way to do it that I don't know about? Can you apply event listeners to multiple objects/functions?
How do you know when you should remove event listeners? For example, I know that if I have a TimerEvent listener, I can safely remove that event when I have stopped and / or deleted my timer. Or, if I have a display object on the stage, and I remove it, I can safely remove any event listeners associated with the display object.
I've placed listeners on the var "topic_mc" (below), but I'm not sure how to remove them properly:
Code: private function layoutTopics(modNum:Number, attachTo:MovieClip):void { topicLength = MainMenu.modArr[modNum].topicArr.length; if (Interface._ui != null) {[code]....
doesn't really work - any trace statement I place within the event function will run for infinity. How do I call the objects properly to remove the listeners? Note: I've tried referring to currentTarget instead of target but that doesn't make any difference.
is it necessarily to add and remove event listeners like so:
Code:
addEventListener(MouseEvent.MOUSE_DOWN,mDown); function mDown(e:MouseEvent){ removeEventListener(MouseEvent.MOUSE_DOWN,mDown);
[code]....
assuming rapid input, is it really better to do this rather than just let the mouseDown and MouseUp Listeners run all the time? It seems like it would be strenuous to constantly add and remove listeners like this. But this is how i generally see it done..
I have 2 functions. Each one is being called by a different event listener. Both event listeners work because I am able to trace strings in both of them.. my problem is that i am trying to create a variable that is local to both functions. The first function "working" adds a number to the variable and when the second event listener triggers function "notworking" which retrieves this same variable called "counting" both functions are called automatically by event listeners.. how do I do this? i am stomped!
Is there some way where I can remove all event listeneres on my components all at once. Expecially when I dont have any prior knowledge of, what all listeners are being attached to my component.
I am creating a large amount of sprites on the fly that have different listeners applied to them -- I want to be able delete these sprites and clear the memory ties that go with them, quick and easy --
Is there a method to detect/remove all listeners on an object without having to check for each one individually?
I have a level select screen with about 30 buttons. I created an eventListener for each of these buttons. My question is: When I click a level to enter the game, should I remove all the eventListeners, or would keeping them around not cause any problems?
fileReference.addEventListener(Event.COMPLETE, uploadCompleteHandler); private function uploadCompleteHandler(event:Event):void {}
Above is one way to add an event listener in Actionscript. By default the callback function needs to have an argument with name event and type Event. Is there a way to declare this function without any arguments :
private function uploadCompleteHandler():void {}
Edit : It's possible to add an event handler without any arguments in mxml. So one student wanted to know, why isn't it possible to do the same in actionscript?
If you dynamically create a parent movieclip, and dynamically add a color picker to each clip, and add an event listener for each color picker, does a removeChild on the parent movieClip remove event listeners belonging to any of it's children?
I'm having problem with garbage collection in a large, not-so-well-written project that I didn't start. I am getting memory leaks -- and want to make sure that all event listeners on the offending objects are removed. I've gone through the code and done what I can, but still ain't happening -- is there a way in AS3 to take an object and see IF it has an event listener, and to REMOVE that listener -- that is, to remove ALL listeners, without knowing what they are? I know if I know what the EVENT TYPE is then I can use hasEventListener() to figure out if it has a listener of that type (although the presupposes I know all the event types being used), but if I don't know the function that it's subscribing to then I can't remove it.
Or is there some other way to simply nullify an object for GC? I've changed all listeners to weak -- but I think (since the offending objects are FLVPlaybacks) that something in the flash internal setup is still listening to my object (I've gleaned this from FB 4 profiler which I've used in external mode). I would just, at this point, like to see what's going on.
its a simple 6 thumbnail gallery with coded tweens. Once a thumbnail is clicked then its attached larger image is meant to display on the screen, this seems to only work after the first click of a thumbnail once the image appears then is clicked it dissapears, and this function only used to work once but now it only works twice, exept the second time around the larger image cannot be removed from the stage, could it be a swapDepths issue?here is my code, i have only fully coded the first thumbnail top left. find attached my swf for the file,
Lately I've found myself constantly writing removeEventListeners everywhere, which makes code quite messy. I know it's a best practice and such, but in general it has no sense. Garbage collector should handle such a simple task by itself, shouldn't it? Is it that hard to remove all listeners automatically when object is set to null?
So I just want to be sure if that's the case. Does setting an object to null, automatically remove all attached event listeners? In my case scenario is like this - I create an object and attach bunch of event listeners to it, then after a while I need to re-initialize this object. Of course setting this object to null is much easier then unbinding every listener by hand. And on most part listeners are anonymous functions, which means that it's not possible without code refactoring. When I simply re-initialize a variable with new I do not get duplicate listeners and such, but I'm not sure that it's previous value, along with all the listeners gets garbage-collected. Is it?
I want to make a static function that I can use in all the custom classes.It should be some kill(); function that would remove the object from the stage as well as removing its event listeners. I made it in Document class, and it didn't work. Here's the code:
ActionScript Code: public static function kill(e:DisplayObject) {[code].....
I have 3 frames each with a movie clip called map_mc. Each different map_mc have different objects that call the CollisionDetect class. Heres whats happening. objects from frame 1 will start freaking out when I goto frame 2. How do I remove only the event listeners from objects only on frame 1?
I have been trying this.currentFrame but the problem is that all the objects are inside map_mc on the first frame so no matter what it will always be 1. On the other hand MovieClip(root).currentFrame will always give me the current frame but wont tell me what the objects frame is relative to the stage.What I want to do is have something to this effect:MovieClip(root).this.currentFrame would output that this object is on frame 1 and MovieClip(root).currentFrame will tell me that the stage is on frame 2 so I can remove the listeners accordingly.
I added this code to make a movie clip (gFP) popup when rolled over and shrink back when rolled off:
gFP.addEventListener (MouseEvent.MOUSE_OVER, goToGFPOver); private function goToGFPOver(e:MouseEvent):void { gFP.scaleX = 1.4;
[code].....
It works, but I have 45 movie clips I want to add this to - way too much code. Is there a way to have the event listeners for all the movie clips go to the same "Over" and "Out" functions?