ActionScript 3.0 :: Adding Mouse Event Listeners To Menu Items
Feb 27, 2012
What is the best way to make a menu with items that can be bought ( a.k.a shop ), bought items are invisible and there are about 20 items or so. What's the better approach than adding mouse event listeners to all 20 items?
What I want to do is be able to click a button that adds an Item to the stage and then you are able to drag the item around on the stage. I know how to do these things separately as in if the item is already on the stage I know how to add the code to drag it and I know how to create a button that brings a library item on the stage. How would I combine the two?
I'm trying to make a flash version of those refrigerator magnet poetry kits. As such I have about 150-180 little MCs each with a different word. They are all named sequentially, so theoretically I could just make some array counter or something to stick the handlers on right?
I'm having an issue with MOUSE_OUT triggering before MOUSE_OVER has a chance. I have a global mouse listener class that listens to every mouse event and sends the object involved a message telling it when a mouse event has happened. When a Menu object is opened it adds a bunch of children and when it's closed it removes them all. The problem comes when moving the mouse from the Menu to the Children, Menu receives a MOUSE_OUT event and closes before the Child receives a MOUSE_OVER.
I'm new to Actionscript 3, and what I'm trying to do is build a navigation menu. What I did is I made a movieclip, added two listeners to it, MOUSE_OVER, and MOUSE_OUT, the MOUSE_OVER tells the menu to play, so it then animates the opening of it. The problem though, that when I put my mouse on the buttons themselves, the menu thinks that the mouse is out of it. I understand that the mouse left the menu itself and entered some other object. I thought of making a new rectangle, and on the mouse out, to check whether the mouse is really out of the menu's regions, it didn't work though.
I am trying to create a drag and drop activity, and I would like to use an array for easy reusability.I'm new to as3 so I've been adjusting my old as2 code. I am using a component for each of my drags and most of it is working well.My problem is with the event handlers. I use the array to populate all of my 'drags' with the information added in their parameters and this works, but when I create my event listeners it seems to only want to move the last item in the array.My drag components are called drag1, drag2, and drag3.[code]
I'm trying to do something that I'm not sure if it's possible. I have to add or remove multiple listeners that will trigger the same three methods (onComplete, onError and showProgress). I was trying to do something like this:
[Code]...
Is there anyway to solve this? It seems that after passing through the addListeners method, the loader instance gets lost.
ive made a flash website containing 5 pages all accessed via flash buttonson one of the page ive tried loading a external swf file and then added event listeners to each of the buttons so when a new page is selected the swf file doesnt continue to play in the background on the other pagesthis works, however when i then try to change page again this error is displayed:ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.at flash.display:isplayObjectContainer/removeChild()atValleyViewingWebsite_fla::MainTimeline/btnClick()below is the code im using:
var Xpos:Number = 110; var Ypos:Number = 170; var swf:MovieClip;
I am trying to learn how to add sub menu items to my main menu which is being generated using XML. I have been able to add the top level menu items but I am not sure how to integrate the sub menu items. a link to my development site [URL] In my code I have a variable showInMenu this value is true if it is a top level menu item and false if it is a sub menu item. If I list out the XML menu items they look like this where About Us is a top level menu item and Our Mission is a sub menu item of About Us. how to set up the sub menu items. I attached the fla with xml file.
I've created this code to loop through an array of image names and load them to the stage. Currently I'm just stepping them down 175 pixels each, which eventually I'll want to offset by the height of each of them (but I'm having an issue with that too lol ). Anyway...my question is, I've seen code to add event listners to each movie clip dynamically, but that code was working on static movie clips. I want to add the listners to my dynamic images and I'm not sure what that should look like.
[Code]....
I know this isn't correct, specifically in the captureAllClicks function...but I'm not sure how else to reference the current item since it was dynamically generated.
I'm adding and removing stage event listeners I am relatively new to AS 3 and have been building a liquid layout site unfortunately I do not have a strong grasp of classes and have been doing all of my scripting on the main timeline with encapsulated script within MC's.
basically I am calling on the same functions over and over and those are mostly resize functions which I have added StageEventListeners on the appropriate frames to listen for resize events on that stage now as of now I have literally dozens of these scattered about the site. when testing my site things are running fairly smoothly however I keep getting error messages in my output window that go a little something like this.
I have 22 buttons (each named buttoni where i is a number between 0-21...e.g. button0, button1, button2) that I've created and artfully arranged on the stage in my .fla file. The document class for the .fla file is People.as, and in People I'd like to give each button a rollover and click event listener, but I can't figure out how to refer to them using a loop.
Here's my code, which obviously doesn't work:
ActionScript Code: private function initButtons() : void { for (var i:int = 0; i<numSquares; i++) { var thisButton : String = "button" + i;
1. An XML list, which works just fine, retrieves between 3 and 15 strings (or menu names). These menu names are put into an array called, "aGalleryMenuID".
2. I want to be able to create a MovieClip and TextField dynamically for each string and place them on the stage dynamically. So if there are only 5, it will make five. 3 will only make 3. The long way of doing this is to create 15 MovieClips and 15 TextFields and use a loop to use addChild. This is okay, but what if later it is decided there needs to be 30 menu items. I want to avoid that and make this future proofed.
for loop that loops through the # of array items in aGalleryMenuID set the MovieClip's name to a unique identifier set the TextField's name to a unique identifier
I'm trying to think of the best way to add event listeners(mouse events) to an invisible object which is quite large. A straight forward way I can think of is probably setting the object's alphy property to 0. However since that object is very large, it will probably have a huge impact in performance. Setting invisible to flash however, will stop it listening to events.
e.g. I have a massive area 4000x4000, but I only want the 2000x2000 area to listen to events.
Other methods I can think of is to have the smaller area in the layer below the big area, covering it from view, though I'm not sure if the lower layer can pick up events? another way is maybe just have the big area listen to events, but in the handler I'll write some code to check if its within the boundary of the smaller area.
I have some MovieClip class that has eventListener, added from inside the constructor of the class (it's MouseEvent.MOUSE_DOWN). Now, I want to add the same listener externally, from parent class, for other purposes. Will these two interfere with each other or it's okay?
I have done this same thing in ActionScript 3, but am not familiar with ActionScript 2, which I am forced to use for this project. I am loading products into a SWF via XML and attempting to add a click event to each dynamically-created movieclip. Simply tracing the text from a node in XML will do for now. I'd like to assign a property called "desc" or "description" to each movieclip and have it trace that property's value when clicked. Here is the relevant portion of my code as it stands:
I'd like to add event listeners to movieclips (already on the stage), whose names are called from an array one by one, into a for loop.
Code: // there are 4 movielcips on the stage with name a1 - a4. // create array var Bro:Array = ["a1","a2","a3","a4"]; // for loop for ( var i:Number = 0; i < 4; i++) { // Add event listener to array values to buttons. Bro[i].addEventListener(MouseEvent.ROLL_OVER, roll, false, 0, true); //execute this function on rollover function roll() { trace("why wont my arrays work in for loops"); }}
I want to make a little game. What I need is to add event listeners to all of Tank objects inside the Battlefield instance. I just can seem to figure out how.
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?
I've created a drop down list and populated it with dynamic buttons. (I made a DropDown_btn class with a dynamic text field in it and then filled the button text from an xml file). On rollover I tint the button blue and then set the tint back to black on rollout. When you click on the button I'd like it to stay blue until a different button is clicked.
...and then I need to addEventListeners back to any button that doesn't have them and set that button back to black. I could do this by looping through an array of the buttons but I can't figure out how to access them as objects.
I also gave them each a property of "buttonValue" when I loaded them so I can access event.currentTarget.buttonValue (which in this case is a number from 1-5) but once again I can't figure out how I might leverage this information.
I am working on a new site, and in the site items from the library are brought on to and taken off the main stage through a handful of functions in the document class. I also have a main menu class that is responsible for building and adding menu items. The way it is built currently, these menu items must somehow reach into the document class and call the functions I created earlier, but I am unsure how to do this. Most things I find on how to call a parents method end with the person saying if it built correctly you shouldn't be doing this at all.
how do I use mouse event listeners outside of my document class. I have the following simplified document class:
public class Main extends Sprite { public var realMain:State1 = new State1();
[Code].....
However, this doesn't work in its current state; "State1" isn't outputted. I have seen references to the use of the Event.ADDED_TO_STAGE event, but am not sure if that is what I need to do, or how to use it.
I have a movieClip on stage, inside is a dynamic textfield, and I have set mc.scaleY = 0; Code: mc.scaleY = 0; mc.buttonMode = true; mc.mouseChildren = false; And suddenly everything above and below (on the whole stage) where the movieClip actually is receives mouse, I can see by the button mode. But it only happens with dynamic text, not static. I have attached the example:
I need to make a resizeable menu like the menu.gif picture I uploaded. For example the menu to have 5 or 6 elements doesnt matter the problem is to make them adjustable on size (will be different movie clips each one) on mouse hover over each one of them but also snap like this.
In AS3 on Android is it bad from a performance perspective to attach mouse event listeners to individual sprites rather than to the stage? I am writing an app for an Android phone using AS3 in Flash Builder. The app has multiple screens that respond to user touch. The screens are arranged in a hierarchy and show list data so that when you click on an item in a list you are presented with a new screen with a new sub list on it.
I have been using an event listener to detect mouse / touch input and based on something I read that indicated that performance is much better if you keep the number of objects you are listening to to a minimum I have attached the mouse listeners from each screen to the stage object.
This all works fine but I am finding that as I move between screens (and they get popped or pushed onto the dislay stack) I have to keep track of alot of adding and removing listeners to the stage object. If I don't then windows higher up the hierarchy than the current screen keep receiving mouse events.
If I used listeners attached to sprites in each window then when the window was removed from the display even though it is kept in memory (ready to be popped back when a child window is closed) it won't receive any mouse events....
Performance doesn't seem to be impacted using listeners directly on sprites when using my HTC phone to test with, however I obviously don't know what it will be like on other phones. Does anyone have any experience either way or a view on the best approach?
I have a movieClip button in my library that I dynamically add multiple instances of to the stage using code (so each instance has a unique name). The button has two frames, so it has a basic rollover effect (just changes color. To make the rollover work, I've had to dynamically add an event listener to each new instance of the movieclip, which triggers the rollover function.
I was wondering, instead of adding an event listener each time, can I somehow have an event listener within the movieclip to take care of the rollover? Or will it not make any difference to the number of event listeners, as it will still add a listener with each new instance of the clip?