Actionscript 3 :: Flash RIA Development - Using Events / Listeners Or Allowing Children To Call Functions In Parents?
Oct 20, 2011
I'm working on a web app built in Flash AS3. At a high level - the app has a main screen, and several "modal dialog"-type screens that pop-up to manage various user interactions. (This is a similar pattern I use in most of the apps I develop...) Typically - when the user clicks a UI control on the dialog screen (e.g., button, text box, slider bar, etc.) - the main screen needs to react, or manage the consequences. It seems like there are two general ways to handle this: Have the dialog screen dispatch events that the main screen listens for Allow the dialog screen to call functions in the main screen when those controls are clicked (which requires that the dialog screen maintain a reference to the main screen, and that the functions in the main screen are public)
In general - I understand that one of the key benefits of the first method is that the dialog screen isn't so tightly coupled; it's only responsibility is to broadcast the event. This would allow me to more easily use the dialog class in other contexts, or applications. But for many RIAs I develop - a particular screen is SO SPECIFIC to the the application that there's no chance I'd ever reuse it in another application. So, the "easy re-use" benefit is minimal. So - if you eliminate that benefit - which method is actually better? (More performant, less resource-intensive?) For example - if I use events, then Flash needs to manage many listeners for events that may never occur. So - it might be more efficient if the dialog window could call a function in the main screen directly, instead of dispatching an event.
i am puttin together a calendar in flash, as it is ending up on a windows server in ASP, so the lovely PHP calendars wont work. I have been using the code from:[url]to get the months and days working, and have todays date highlighted. Now i need to work out a way that i can set this up to call a flash movie onto a higher level which contains the events of the day you click on. Such as: Because the dates are determined and inserted via AS, im not sure how to set this up, or if it is even possible...
Okay, here is the relevant files for a game I am making and their structure: -Stage -->MainMenu.as --> NewGame.as --> beachArea -->barrel.as.................................................. ......-->player.as.................................................. ......--> pistolBullet.asSo, am trying to detect when a bullet hits a barrel. I was going to use the hitTestObject() functionI got as far as trying to actually access the properties of an instance of barrel from the pistolBullet.as and seem to be a little confused as to my findings.. Can anyone explain to me why the last trace function returns undefined?pistolBullet.as:
Seeing as I don't have too much formal education Flash/OOP in general, this is just one of those thing I can't seem to quite deal with gracefully. All I'm trying to do is to be able to load/reset my an instance of my game's main class (not the first class that gets pulled up by Flash, but the one that actually has games logic in it), which of course extends MovieClip. It took me a while before I could even make an instance in it, because it would silently crashed when I would try to do so, and what didn't help was that the output window stopped working, and I had to completely reinstall flash. As far as I remember I simply fixed it by taking out the "stage." from any of the lines of codes that had it.
I'm trying to build a menu system which populates itself by parsing labels from the Flash timeline. As well I have a requirement to keep this all within one FLA file... so no classes or XML files. After 2 days I'm pretty close here, but have a problem with mouse_out's. I'd like to be able to move my cursor up and down the popped-up sub menu, but as soon as my cursor leaves the first sub button it triggers the mouse_out function.
I want the mouse_out to trigger only when the cursor leaves the entire sub-menu, not it's children. I believe this is a traditional problem and there's solutions but after 1.5 days of tuts and threads I haven't been able to manage it. I think I may just have to tweak how I deal with the submenu array.
ok, my Digital arts class is making a flash project, and im like the only one actually making a game, so im pretty much alone. i got a lot of help from the people on the AS3 forum, but im pretty sure that my question is too easy to put there. so, i have an array, and it basicly puts a spike on the screen at a random Y, and moves it across the screen, but, when i hit a spike, and ti goes to the you lose screen, the loop keeps adding children, and putting them on the screen, is it possible to just say stop adding children, and go to the next frame? i have a break, but when i stop colliding with the spike in the next frame, the spikes start coming again. also, can i totally reset the movie? cause when i just go to frame 1, the array plays itself ontop of itself and it gets twice as hard
This may well just be because it can't be done but here goes.Does anyone know of a way that I can make a MoviecClip "visible=false" whilst stopping just one of its children's, children's, children...etc from also going invisible.I am aware that it can be done by setting them all individually but this will take a lot of code (and I like tidy code...and I'm lazy), and I am reluctant to use a loop as it will interrupt the animation that is going on at the time.
I am working on a tree component and I am having a bit of the issue with populating the data-provider for this tree.The data that I get back from my database is a simple array of value objects. Each value object has 2 properties. ObjectID and ParentID. For parents the ParentID is null and for children the ParentID is the ObjectID of the parent.
Essentially the tree should look something like this:
This is my first post. I'm new to actionscript, but not to programming. I hope to learn a lot from these forums. To the point: I decided a few days ago that I wanted to create a flash game. I'm taking an object-oriented approach to the game design since that is what I know. The issue I am having is that I have a class called Hero that inherits from a class called Entity. Now my issue is that I don't want Hero to call the Entities class constructor when I initialize a new Entity.
I have an animation that I want to start when clicking on the flash window. However, I've also have some buttons on the stage. If I add an event listener for MouseEvent.CLICK on the stage, then it 'eats up' the events and the buttons don't work.
I've tried some tricks, by adding some invisible buttons on top of the real ones, and use the MOUSE_OVER event to selectively enable/disable the mouseEnabled flag for the stage, but didn't work because it complains that the property or method doesn't exist (which I find odd).
I'm working on a prototype that would require me being able to read and track the mouse movement over a playing youtube video. The basic code to replicate my problem boils down to this simple test case:
Youtube player loads The label on the top right tracks the X coordinate of the mouse The number should update even when moving the mouse over the Youtube player
So far the program behaves as expected when running from the IDE (tested on both FlashDevelop and FlashBuilder) and even when running the file manually from the output folder. But, alas, when I try to run it from anywhere else than the debug folder (be it another location on my computer or up on a webserver), the Youtube player seems to eat the events.
I don't get sandbox security warnings when debugging (thanks to allowDomain("*")) but I'm running out of ideas on why the program fails once you take the file out of the debug folder.
I am trying to add children to a dynamically added swf file, using AS3, before I add it to stage
Here is the code I have thus far,
AS3:
var mLoader:Loader = new Loader(); var mRequest:URLRequest = new URLRequest(glo.bal.base_url+"videos/vid_1.swf"); mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler_one); mLoader.load(mRequest);
[Code].....
Inside the vid_1 swf there is a movie clip called box_one, I would like to append a image to box_one, and only have the swf added to stage after the image file has been added to box_one.
i got a s:List with a dataprovider and a custom itemrenderer. now my itemrenderer has a button within. Every time i choose a item from the list, i get focus on the item, but clicking the button within the item only causes the s:List to select the hole item and wont let me press the button within the item.
is there any solution to disable the "list" selection functionallity but keeping the items within the list enabled / clickable?
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]){
I have a base class, and I created a class to connect to C# to which it sends and receives data. Now I want the base class to know when the Connector Class has received data and to get that data. so custom events are the answer right. But no matter how much documentation I've read, I can't get my head around this. My current class, if I extend EventDispatcher the base class can pick up fine but I need it to get the data that it received as well. So I extended Event and I've put a listener on my base class but it's not picking up the event (in fact although it's compiling it seems its breaking my connection to the C# as my C# client gets an error).
Should my connector class be extending Event or EventDispatcher. Then if it extends Event, I need to create another class to dispatch the event? someone said to me I don't need events as the callback will handle it, but my callback is in my connector class not the base class.
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'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.
In my SWF, I have a movie clip that I wish to play itself immediately after the site loads. I have two other movie clips that are required to play once the first movie clip has reached frame 13. This is a function that I would like to repeat, as the first movie clip (followed by the other two) will be required to play the others after certain mouse events within the movie.
PHP Code: hello_button.addEventListener(MouseEvent.CLICK, click_handler); function click_handler(event_object:MouseEvent) { /* Do something with this event */ }
While others import class objects and operate under package headings when describing how to add listeners and send out dispatchers.
I made a custom loader to replace the urlLoader and even tried a replacement for the _loader using the same custom event.Works great for the first addEventListener:
Code: urlLoader.addEventListener(Event.COMPLETE, onSwfLoaded).But stops on the second addEventListener.If I just apply the custom event to the following...
Code: _loader.addEventListener(Event.COMPLETE, onLoaderInit); VERSUS
Code: _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderInit);it works just fine.As soon as I use it on the contentLoaderInfo line, it throws that type error cannot convert CustomEvent to Event error.I also double checked that my custom event listener was overriding clone()properly and it looks like it does.
I am adding a different listener to each button in the menu and there are several menus as well, then each one of those functions adds a different child depending on the button and also pushes several values to the Array list, in this example called objectsOnStage. I will be running this structure function 40 times with each of the highlighted elements changing accordingly.
//Listener and function for Button01 menu01.button01( MouseEvent.MOUSE_DOWN, button01Function); function button01Function(event:MouseEvent):void {
[code]....
My original thought was to keep all those changing values in an Array list and run a loop for the function/listener, but I just cant make it go.
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?