ActionScript 3.0 :: Managing Various Event Listeners In Multi-frame Movie
Sep 11, 2008
I'm working on a gunslinger game. I have numerous frames which correspond to different stages of the game. The frame that corresponds to the actual gameplay has a really involved ENTER_FRAME function attached to particular item on the stage. When the game is over (or an error occurs, or the network connection fails) I want to leave the gameplay frame and move to some other frame. When this happens, I would like the ENTER_FRAME function on the gunslinger to be removed because the player may finish a game and then re-enter the gameplay frame later after selecting a new opponent.
QUESTION: Can anyone recommend a good way to manage the keyboard event listeners, all the button event listeners, etc? As you might imagine, I have no reliable way to determine which frame might be entered after the gameplay frame because the frame change could be triggered by a variety of different reasons.
I am using Adobe Flash Professional CS4 with all the latest updates. The FLA is an Actionscript 3.0 file. I am creating a basic flash site with several pages that change when the user clicks links on a left side navigation bar. on the pages are sub tabs that change out different content(text) based on what the user clicks on the current page. when they click a button it triggers an event listener, the event listener runs its function which changes the definition of an already defined (String) variable, and the page goes on to a frame checks what that variable is and then leads the movie to the correct frame that the corresponding content is on.
here's the issue: it works perfectly the first few times, and then the event listeners stop working, first one of them, then all three once i click one of the two available. i started this site before i even knew what a class was(regretably), and all the code is on the timeline in different frames.
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 l modded some code that I am really happy with, it makes buttons bounce around for the user to try to click on when entering a certain frame.. I notice tha the code adds eventlisteners ENTER_FRAME to make this work, when you leave that frame there are now problems with null objects becuase the listeners are still on but the objects are not there anymore..
Ok so attempted solution - I can use a currentLabel on the main timeline to check if the correct frame is reached then use a function if (label is x) put listeners on else take them off... works but then I have to have these objects hidden on the timeline and then add visible=true/false to my framelabel listener.. This works but part of my functionality here is that these movieclips that move are buttons that the user clicks on and they explode and dissapear- but now they dont because I have a code that says on that frame they should be visible..
The only thing I can think of is to have a blank frame at the end of the explode and put a stop on it. Then add a gotoAndPlay(1) into my frame label code. Seems very ugly, you guys got a better way? Can I remove eventlisteners on leaving a frame? Is there a code like LEAVE_FRAME??
I'm working on a small project in which I need to drag and drop some movie clips on a target. There are 7-8 mvcs, I tried following code so that I can use the event handlers. But it is not working. I tried to search and found generally the event listeners are used with mvcloaders. May I know if, we can use event handlers with mvcs ?[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 ?
Anyway, I am just trying to figure out movie clips as buttons, and have been following along on however, I seem to be doing these things right, but when i test my movie, the button just loops regardless of rollovers or stop actions.You can check this addressto see the failed anim, and you should be able to import it as well. Here is my coding:
function rollover (e:EVENT){ myBtn.gotoAndPlay ("in");} myBtn.addEventListener (MouseEvent.MOUSE_OVER, rollover); function rollout (e:EVENT){ myBtn.gotoAndPlay ("out");}
I if create a sprite, and that sprite contains numerous child sprites (which themselves also contain child sprites), do I need to worry about garbage-collecting everything, or just the parent sprite? What if the child or grandchild sprites have listeners attached?
For example, let's say I have a class (a subclass of a Sprite) that creates a screen in an application.That screen contains numerous Sprites for all of the UI affordances on the screen (e.g., buttons, drop-down menus, textfields, etc.) Many of those sprites have event listeners on them.So, in my application, I have this:
var myscreen:MyScreenClass = new MyScreenClass(); this.addChild(myscreen);
Later, when the user is done with that screen, I remove it:
this.removeChild(myscreen); myscreen = null;
Is that all I need to do? Or, do I need to go recursively through myscreen, removing all it's child Sprites and Event Listeners?In other words, if you GC a parent, are all it's children, grandchildren, great-grandchildren, etc. also GC'ed?(For what it's worth, I'm using weak-references in my event listeners...)
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:
I'm creating a flashwebsite and I've got a problem with submenu appearing/disappering. What is extremely easy in html/jquery is taking me overburned in actiuonscript: make appear a submenu only when the mouse cursor is over its button and not over itself. Indeed I've my button/MC, that contains its submenu (which is a vertical list of MC), and when I go over it, submenu appears, when I leave, sub menu becomes invisible. BUT, when I go over the space under the button (where my invisible submenu is), submenu become visible another time. I know that cause is the listener associated to the main button is linked to all its nested MC.
The problem is I get Error: Error #2094: Event dispatch recursion overflow. Why does removechild keep getting called if this.parent does not exist? Why doesn't removing event listeners work?
Can event listeners only be added to the class which dispatched the event? I ask because I want to have the logic for the listener on the main class, and the action is dispatched on click from a thumb which is instantiated in a scroller class. Kinda like this:
ActionScript Code: pseudo code: class main { main() {
[code]....
This doesn't work. Why can't the main class listen for an event on the thumb class?
I've created a multi frame MC for placing each of my slide out images on and have added a tween slide out MC.my onrelease is working and I've correctly switched the image frame for the relevant picture being clicked before playing the tween MC.However once the MC stops playing the image MC is reverting back to showing frame one image.Why is this happening? Also why when the slide out MC is over the smaller clicklable image the hit area is still available through the image being shown?I've ensured that the slide out MC is on the top most layer, how do I make its backgroud solid so any clickable item underneath is not available.
I'm having trouble managing the depths of my movie clips.I've got a startDrag() function and a stopDrag() function. Whenever I rollover another MC, I want the depth of that object to change to 1+ the object it rolled over.(I apologize if my English is poor)This is as far as I got, but cIndex returns the depth of the object that is currently being dragged; not the object it's hovering over... Is there a way to get that depth?[code]
OK, I am trying to get the following functions to load and unload the video to my main timeline when I go in and out of a frame. I tried on Enter_FRAME but it is now working properly and load many instances.
What are the listeners I need to do to call the functions of oCoach when enetering a frame and fclickCV when leaving a frame?
What I am looking to do is add a fire button (added) which for the entire duriation it is held down it fires bullets (functions added), i'm stuck with what codes to use for the bullets.I want to create the bullets at certain points on the x, y axis and use a function to move ALL of the bullets accross the screen at the same speed at the same time.I'm fairly sure I need a Array of the bullets but I do not know how to do this.Also I do not know how to use AS to add clips to the page.I also do not know how to remove the clips from the stage and array once they hit the 'destructor' bar out of the screen area. (I know how to use the hittest in AS3).
I'm having trouble managing the depths of my movie clips. I've got a startDrag() function and a stopDrag() function. Whenever I rollover another MC, I want the depth of that object to change to 1+ the object it rolled over.(I apologize if my English is poor) Can anyone give me a nudge in the right direction? EDIT: This is as far as I got, but cIndex returns the depth of the object that is currently being dragged; not the object it's hovering over... Is there a way to get that depth?
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?
I have a "snow movie clip" playing in my .swf, but removing the clip on a certain frame doesnt stop it from playing. I need to either remove it or hide it using as2.
I am developing a multiple choice question answer. I have a movie clip in frame 2 where the radio buttons and question choices are displayed.I am trying to define a event for the radio button in the movie clip's first frame. But i show questions in random order. Say for example the first question to show is fifth I move the movieclip to 5th frame. The event is not firing since it is declared in the first frame.Should i place the button event code in each and every single frame or is there anyother option for this.
So I've gotten into using my own as Classes, and have an interesting question. My main swf calls a php script that gets data from a mysql database which is returned as XML. Part of that data that is retrieved is a filepath to a jpg image. It then takes that filepath and other information, and passes it to my external class, the "news story" class.
All fine and good. Then, the "news story" class uses a loader to load that image along with some text, organize it, and voila, you've got your own very pretty "news story". (I'm extending the MovieClip class here, though I suppose it doesnt matter)
Now, my main swf uses this component to load multiple of these "news stories". The problem is, theres that load time for the image. The main swf is loading them all one at a time, because they are putting each one together on their own.
The key here is that it be dynamic. So, since we don't know how much text is in each "news story", we also therefore don't know it's height. What I'm doing is creating each story in the main swf, pushing it into a "news story" array, adding an event listener to each ones' loader, and when the event listener is triggered, I want it to go to the 'add content' function where it sets the news story's Y value based off the position and height of the previous story that was added (stacking them, obviously). This makes sense, because otherwise it'd add them all on top of each other and it'd be a jumbled mess.
The problem is, the event listener is on the loader object INSIDE the component actionscript. So, how do I figure out which news story to set the Y value for? Because the eventlistener is listening to the loader, not the class. I hope this makes sense AT ALL. Here is the code:
Quote:
while (fancy shmantzy conditions) { /*creates the news story and passes xml data to it (filepath, etc)*/ storyBlock = new StoryBlock(a bunch of parameters); subCBArray.push(storyBlock); //array that stores each news story info
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]){
Lately I've been twitching in the back of my head wondering just how many references to objects that I'm making, and whether or not they are getting GC'd or not.My question in this sense refers to event listeners and whether or not they are removed in certain cases where you get rid of an object. Two examples:
First, and I think this one is an easy one... when you create an object that adds an event listener to itself INSIDE it's own methods (e.g. this.addEventListener(e:Event, function)), when you REMOVE that object (this), do it's event listeners disappear too? I can only say yes, because they are referencing THAT object and are INSIDE that object.
So I think that question answers itself (but I'd love to know if the truth says otherwise).
But secondly, if you add an event listener to an object from a sibling or parent object, and then remove the object, does that event listener stick around, therefore maintaining a reference to that object and keeping it in memory? And is that the concept that people keep referring to of 'weak' event listeners? E.g. someChildObject.addEventListener(e:Event, function)Also, are event listeners by default strong or weak?
And I am assuming that 'yes', it DOES keep the reference. Which, if you are a n00b programmer like me, you probably are all like, 'aww sh*t damn, how am I supposed to make sure that my objects are getting thrown in the garbage collector's mouth of goodness every once in a while?
I found this code for a contact form at[url]...and it dynamically creates input fields and buttons. I didn't like the dynamically drawn submit and reset buttons, so I added my own MCs(my 'buttons') to the stage.I tried modifying the code and took out the dynamically drawn buttons..However, I cant figure out how to add Event Listeners to the buttons which exist on the stage--Im getting undefined errors...[code]...
I have a movielcip (A) class in which I have used a Tween class effect on a child movieclip (B) scrollRect. The (B) Movieclip in turn has several movieclips whose have tween class effect being executed on thier child movieclips.the tweens are all unique to each movieclip and the event listeners are taken off once completed.This works all well and good in FLASH IDE..My problem arises when I try to view this in a browser on a Windows XP.[code]
What is happening in most cases it that the animation appears to "stick" but i think what may be happening is the listening or removal of the event listeners. The animations are left incompleted.Is there any rule of thumb when using multiple event listeners?[code]the effect disables and re-enables the buttons when its done.... then the listeners are removed.each one with the exception cretes its own unique tween (obviously this is a custom class built as each clip)
I have an array that returns multidimensional data from an mysql database, when this is collected the createNews function creates the user interface. The problem I am having is the loop is iterating quicker than the UI is being created, is there a way to use event listeners with loops so it only continues after my function has completed its work?
In my Flash project I have a movieclip that has 2 keyframes. Both frames contain 1 movieclip each.
frame 1 - Landing frame 2 - Game
The flow of the application is simple:
User arrives on landing page (frame 1) User clicks "start game" button User is brought to the game page (frame 2) When the game is over, the user can press a "play again" button which brings them back to step 1
Both Landing and Game movieclips are linked to separate classes that define event listeners. The problem is that when I end up back at step 1 after playing the game, the Game event listeners fire twice for their respective event. And if I go through the process a third time, the event listeners fire three times for every event. This keeps happening, so if I loop through the application flow 7 times, the event listeners fire seven times. I don't understand why this is happening because on frame 1, the Game movieclip (and I would assume its related class instance) does not exist - but I'm clearly missing something here.
I've run into this problem in other projects too, and tried fixing it by first checking if the event listeners existed and only defining them if they didn't, but I ended up with unexpected results that didn't really solve the problem.