Actionscript 3 :: Clone An Object Including Copying The Event Handlers/listeners?
Apr 15, 2010
I want to clone an object of a class (whose source code I do not have) and copy all of the associated event handlers from the original object to the new cloned object. Does anyone know how I can do that? I know how to copy the properties from the original to the new, but can I iterate over all the event handlers and add them to the new object?
Baisically I've created a button using symbol and I want the button to move a movie clip up the y axis by 4 every time it is clicked (move the movie.) I really don't know how to do this. This is what I currently have but its not ActionScript:
Im tyring to turn a Movie Clip into a classic button - roll-over to display text, roll-off and text goes away, click and go to frame of animation. Each works on its own but when I put all 3 on the same Movie Clip (Tick1) each succeeding event listener seems to erase the previous one. Here is the code:
var txtField:TextField = new TextField(); Tick1.addEventListener(MouseEvent.CLICK, GoToStart); Tick1.buttonMode = true;
In the code below, I have created an instance of the DrawLineChart class called LineChart1.When I test the movie, it shows up on the stage just fine and when I click on it, I can use a trace command to get a string statement written to the output window. However, now I want to be able to click on LineChart1 on the stage and have it be removed. When I do that, I get an error message 1120: Access of undefined property LineChart1.
why I'm unable to refer to my instance LineChart1 and what I need to do so that I can refer to it and remove it when it gets clicked? why the trace statement works when I click on LineChart1 during runtime, but not the removechild command.
trace("hello"); // This works. When I click on the LineChart1 MovieClip on the stage during runtime, I get "hello" as an output. removeChild(LineChart1); // throws an error 1120: Access of undefined property LineChart1.
I have created a new class, that is basicly just a movieclip but with a builtin eventlistener. When I add a few instances of this class to the stage, they all have the eventlistener. But later on when i remove the intances from the stage and null the references, Will the eventlistener still exist or will it be removed by the GC ?
I'm having trouble telling flash which Sprite to move in my script:
[code]....
TimeBlock and TimeHandle are really just classes that draw rectangles. My script (as seen here) will move the last instance of timeHandle added. If I un-comment the other new TimeHandle() section though, it will only apply it to one of them.
Ordinarily I would use event.target, but I have to use the stage as the listener for MOUSE_MOVE and MOUSE_UP. If I was doing this in PHP or even AS2 I would just pass an argument like reposition(clipname).
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 am trying to register mouse event listeners for children of my parent object (Inheritance), which works. I just need to register those for the parent and they get dissipated down the hierarchy.However, if i try it for Composition i.e. if i register the mouse event listeners on the main (parent) object, they do not act on the components of the object.So, i have to register the listeners individually on each component.how to get event registration working for composition?
So, I have 2 types of relationships in my project.
-Inheritance -Composition
I am trying to register mouse event listeners for children of my parent object (Inheritance), which works. I just need to register those for the parent and they get dissipated down the hierarchy.
However, if i try it for Composition i.e. if i register the mouse event listeners on the main (parent) object, they do not act on the components of the object. So, i have to register the listeners individually on each component.
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.
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 a movieclip that contains two frames, each frame contains a different set of buttons.
it seems that i cannot add the event listeners to buttons that are not in my current viewed frame.
so.. problem one: is there a way to add event listeners to all the elements in the movieclip even if the elements are in a different frame.
problem two: after I added an event listener to some elements in current frame and then I move forward to the next frame and go back to the same frame, all the event listeners are removed and i need to initialize them again. is there a way to resolve the issue without the need to re-initialize the event listeners ?
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 have created a custom even class which is pretty basic. But when calling an event and then relaying that event to another class I have encountered the "cannot transform thisEvent into thisOtherEvent" error. I realize this is because I needed to override the Clone function in my custom event like so:
I ask because I caught this at the end of an Adobe developer guide:
Notice that some properties are assigned to the [AsyncToken] after the call to the remote service is made. In a multi-threaded language, there would be a race condition where the result comes back before the token is assigned. This situation is not a problem in ActionScript because the remote call cannot be initiated until the currently executing code finishes.
But I could not find any information on what they meant by "currently executing code".
I noticed that in anonymous event handler this is referenced to global, not my class. I know that I can use outer referenced variables (because it creates closures), but how to get right this context?
My project has a target object (center of stage) and a moveable object, which is created each time a user presses "Enter". Each movable object is identified as part of an array (i.e., object[i]), and a new line (i.e., line[i]) is dynamically drawn from the center of the newly created object to the center target object.
Basically, as the object is dragged around the screen the line is to stay connected to the target object. Therefore, that specific line for that object being moved must be redrawn using a drawLine function inside the event handler. My issue is how to get line[i] to be identified within the even handler? (Using AS3 coding)
How should I comment an event handler param?I mean, should I comment event handler param?Example:TimerMessage class extends Timer.TimerMessage class, has a setMessage method, which stores a text message whithin its public var 'message'.in usage:
var timer_message:TimerMessage = new TimerMessage(1000, 1) timer_message.setMessage('hello') timer_message.addEventListener(TimerEvent.TIMER_COMPLETE, displayMessage)
What methods do you use to unit test event handlers, particularly if they require information from the event (such as mouse coordinates, or the target of the event)? Is the most common practice to just refactor the behavior into a method that does the lifting while the handler just extracts information from the event, or are there effective ways to simulate event dispatch in FlexUnit or Fluint?
I came to AS3 from JS world, and I should confess that anonymous functions are my weakness. I tend to use them everywhere. Now, coming to AS3 I've heard and read in lots of places, that AS and Flash are enormously bad at handling garbage collection, that one should empty, dispose and remove all event handlers and objects manually to avoid weird and unexplainable memory leaks and crashes. Not sure what part of this is true, but I would like to follow best practices right from the beginning. How bad is idea of using anonymous functions as event handlers? Consider for example a code like this:
Ccontorls.elapsed is the setter, which apart from setting current play time for video player, updates the whole UI, and stream is NetStream object, which streams the actual video. There are lot's of other places where anonymous function may make code cleaner and more intuitive. Check the following code for simple fade-in effect for the control bar:
public function showControls() : void { var self:Controls = this; if (!visible) { visible = true; fadeTimer = new Timer(30, 10); [Code] .....
I totally like how it looks and fits into the code, but I'm concerned about leaks. While Event.ENTER_FRAME handler probably would never become harmful in this form, what about timer listeners. Should I remove those listeners manually, or they will be removed automatically, as soon as I set fadeTimer = null ? Is it possible to remove listeners with anonymous functions properly at all?
i have an odd issue and i know almost nothing about AS3 so im a complete noob please bare with me. I am working with a template .fla for a page flip but i am using a different navigation system for the flipping of the pages. I have worked through all the errors and output problems and i can get the system to work but the moment i try to use other event handlers for the same item it completely blows up the main script to make the page flip that is required. No errors, output problems etc, it just doesn't work. So here is the code.
Is there a way to achieve what i'm trying to do here? Obviously it doesn't work this way because only the last event handler is activated and the first one is ignored.
trying to create a menu dynamically from an array. I know there is a way to circumnavigate the issues i am having by making another array with linkNames in it (i think), but im trying to understand why this isnt working. Check this out.
Code: var playerArray:Array = ["THIERY","FIGO", "RONALDINO", "WAYNE"]; var contents:MovieClip = this.createEmptyMovieClip("contents", this.getNextHighestDepth());[code]....
'currItem.currVar', in my eyes, should be assigned the value of 'i' at that time in the loop, then move on to the next currItem right? Tracing 'currItem' traces 'menuItem. menuItem'+i to the output window fine, so im assuming that currItem is indeed a reference to a unique clip to which assign an action. The catch is, its not assigning the action I want, its assigning the value of 'i' at the end of the loop to all currVar's.I recently read a post explaining this conumdrum, stating that "variables are not "burnt" into functions when they are placed there. They will reflect the variable, where ever it may exist at the time it was requested, not at the time the function using that variable was defined," but in this case,since I am assigning the value of 'i' to anothing variable inside my dynamic movieClip.
I'm trying to rewrite a procedural ActionScript program as an OOP one: in the procedural version I set up event handlers for movieclips on the stage with a loop and it worked fine.However, when I put these event handlers in a class definition, it's no good. Simplified version below, which is just supposed to make a sound when the user clicks on the boxclass definition:
class Event_stuff { var nLpCntr1:Number = 0; var nNumberOfChoiceBoxes:Number = 3;wrong use of terminology
Say I have an array with 4 string elements that are 4 different urls. On the stage I have 4 movieclips that I want to have listen for a CLICK event. When the user clicks a button, the navigate to one of the 4 urls.I can loop through the buttons and add and event listener to each:
Code: private function applyPlankLinks():void { for (var i:uint = 0; i<numberOfPlankBtns; i++) {
Is there a way to achieve what i'm trying to do here? Obviously it doesn't work this way because only the last event handler is activated and the first one is ignored.
PHP Code:[code].....
I'm simply trying to apply the function to the two handlers in the beginning of the first line: this.txtbtn_edegem.onRelease and this.btn_edegem.onRelease