ActionScript 3.0 :: Accessing Stage Instances And Instantiation Order?
Feb 25, 2009
I've been having a problem that I have not found a good solution for. I think this is a problem related to the Flash Player's architecture so an experienced eye here would be welcome.
Imagine you've got 3 symbols in the Library and create instances of them by dragging them onto the stage. Each object is linked to a class. Let's say the object classes are named ObjectA, ObjectB, ObjectC. Their stage instance names are objectA, objectB and objectC.
The classes of these objects reference stage instances. For example, ObjectA might have a reference to ObjectC, like this:
var _objectC = MovieClip(root).objectC;
ObjectC might have a reference to ObjectA, like this:
var _objectA = MovieClip(root).objectA;
It sounds like this should work but it doesn't. When the SWF is published, objects on the stage are instantiated in the order that they were dragged from the Library. This means if objectA is instantiated before objectC, it's reference to objectC will return null and the code will fail.
I know there are ways around this, but I'm trying to come up with a solution that doesn't involve the document class, a helper class like a singleton, or instatiating objects with addChild().
It seems that the only way you can be absolutely certain that all the objects have been instantiated is on the first frame of the movie. So I've been using a system that adds an enterFrame event listener to just get references of stage objects when the first frame runs, like this:
function findStageInstances(event:Event):void
{
var _objectA = MovieClip(root).objectA;
var _objectB = MovieClip(root).objectB;
[code]....
(Note: The ADDED_TO_STAGE event won't help in this case because objects are added to the stage by the SWF based on the order they were dragged onto the stage from the Library.)
my movie is linked to an external class called game, and in the game cosntructor I am trying to access instances on my stage. I have tried MovieClip(root).instancename, root.instancename and even tried adding an event listener to listen when the movie is done loading because I thought maybe it was because the instances on the stage weren't created before the constructor is ran. This is the main class, shouldn't it be easy?
i've been all afternoon trying to figure out a solution to my problem, and I can't seem to find it, or cannot implement it. Let me lay it out for you: I have an actionscript file linked to a movieclip. (movieclip:skate class linked: generic_skate).I have it set up that way so I can create an array of skates easily (i'm using a for loop to create them), and each skate has its own attributes (name, description, price and the image that is supposed to go on the deck)In the stage, i have three text boxes, one for the price, other for the name, and another one for the description.In the generic_skate class, I'm handling all the mouse events (in this case mouseOver and mouseOut.
What i want to accomplish is: when the user hovers over a skate, the info shows up in the text fields and when he hovers out, the info goes away. My problem: Since I'm doing all the mouse interaction in the class file, my guess is that I have to access the stage to get to the text boxes that are placed there to change its info or somehow create a "middle" man to do all the handling.
I have neither the capacity nor the integrity to overcome as3, how to build a system wherein if I were to press movieclip instances in a certain order, would move me to a certain frame if I did. I am trying to do this without making 100 eventlisteners and relying on an array instead. If I could say anything about how as3 is about implementation of values, I'd say it's a bit like using the titanic to deliver a piece of cheese on toast, but I guess what I need to know specifically is
How to make a function that relies on a certain set of array values. How to splice that entire array after the array reaches a certain number of values. How to move to frame 2 if the array does possess the correct values. How to stay on frame 1 if it does not.
So far I have var inacertainorder:Array = new Array(); var i:*; i = 0; function toframetwo(event:MouseEvent) {gotoAndPlay(2)}; if(inacertainorder[i] == "0,1,2") {stop();} else inacertainorder.splice[i>3] {gotoAndStop(2);};
I can't seem to access instances in a movie clip that aren't on the first frame of a parent movie clip even if I tell flash to go to that frame before I attempt to reference the instance in the actionscript.
Actually this works in flash player 10 but not 9. I could just export for flash player 10 but I would rather know the answer than just avoid it and of course for better compatibility reasons.
I've attached an fla example with source code to show the problem. I'm using CS4 and programming in classes in as3 as you will be able to see from the example.
P.S: the example is saved in CS3 so more people can open it.
Edit: Since there's not alot of code I'll paste it here for people to see.
I am using CS3 / AS2 and was wondering if it was possible to load a movie into a symbol, not just an instance of that symbol, from the main timeline. I tried exporting the symbol for actionscript then using loadMovie but I suspect that is not the correct way to go about this.
PHP Code: symbol.loadMovie("urlToMovie");
Is it even possible to do this or do I have to change every instance of the symbol individually?
I'm setting up some Radio Buttons. The desired effect is when you click a button, it calls a function which loops through an array of the button states, switching them off.
The stumbling block is changing the state of the buttons from on to off. I'm sure it's an issue with the way I'm trying to get the instant name (eg radioBtn1) into the MovieClip Variable 'currentRadioName'.
The error I receive is: TypeError: Error #1034: Type Coercion failed: cannot convert "radioBtn1" to flash.display.MovieClip.
So I'm trying to stick some object into a MovieClip object, which obviously doesn't work.
With the GUI (Flash CS3), I made a button that included an instanced dynamic textfield. Whenever I try to access it, I get the error message 1119: Access of possibly undefined property
The line is: big_btn.labelTxt.text = "Start"; the button is named big_btn and the textfield is name labelTxt
If I change big_btn to a MovieClip, no error and it works.
Can you imbed an instance inside a SimpleButton? If so, how? If not, what's the logic behind allowing it in a MovieClip, but not in a SimpleButton?
I have programmed a game using the Flash authoring tool and a document class. I'm trying to graphically add instances and add functionality in the document class. Suppose I have a main timeline with 3 frames, each frame reperesents a different level of the game. In frame 1 I have an instance of the MovieClip class named tree1 on the stage and in frame 3 I have an instance of the MovieClip class named tree3 on the stage. In my document class, after an initial stop() command, I want some logic like: tree3.scaleX = tree1.scaleX; But tree3 is unknown to the runtime since we are not of frame 3 yet. Any way to access all the instances on all frames declared in the authoring tool from the document class?
I have mutliple instances on the stage of a custom ThumbNail class. As you click on a particular instance an associated enlarged external image will load. As this is happening I want to make sure that the ThumbNail class animations are inactive for all instances.
I was thinking of using a Boolean variable that would get set right before the image is loading. Using event.currentTarget should help with the instance that was clicked but how do I gain access to the instances that were not clicked?
I have a movie clip on the root which contains my menu. And another movie clip which plays my video. Basically when i click a menu item it calls a function which i want to able to send a command to my video player to play another video.
This is code inside my video player movie clip (i've missed out the including of the class and various config stuff - below is just so you see the name of the class instance)
var MDVideo:MD_VideoPlayer; var videoPath:String = "assets/ski_video.flv"; MDVideo = new MD_VideoPlayer(videoPath, local_config_obj);
[Code]....
How do i access the MDVideo instance from my menu movie clip?
i know its probably been answered here before but I havent been able to find exactly what i need to make it work. Plus this is my first time doing AS3 so
- A.fla includes buttons, movie clips and also B.swf is loaded in A.fla using a LOADER
- i want to access elements in A.fla, from the actionscript codes inside B.fla to modify those movie clips and buttons based on actions going on in B.swf
for instance, lets say there is a button X in A.fla, and there is a button Y in B.fla, B.swf is loaded into A.fla, and I want the button Y to erase button X when clicked.
general question: accessing elements in a stage, through a SWF file loaded into that stage.
Imported swf movie being played on top of button existing inmain flash and button shows on top of movie for some reason. I CAN NOT hide button (i dont want this solution) i need other solution i need to put it behind movie.
I have a main swf that I load external swfs onto the stage. I am trying to fix the loading order. Currently when a button is pressed, the swf is preloaded, the current swf is on the stage with the preloader showing, then the preloader disappears and the swf plays the outro transition.
how to change the order so that currently loaded swf is removed from the stage, show the preloader and then show the new swf.
I have a movie on stage that acts as a button using the code. person_mc.buttonMode = true;
I load an image onto the stage from my library using addChild(holiday);
What happens is that the person_mc button I have on stage will not function anymore, because I am presuming it is underneath the holiday pic when I loaded it using addChild.
How do I load the holiday pic, so that it is underneath the person_mc?
I know I could do what I did with holiday using addChild for the person_mc, but I do not want to do it that way.
I have this library with more than 80 objects that i want to bind to my keyboard. My idea is use the "keyCode" to call the object to the stage, constructing the object's name inside a variable.This is the code that I'm trying to use, but the bold text line always give me an error (constructor, syntax and others) depending how i write that line.[code]I'm not very experienced with AS3 so i don't know if this is the right approach to solve my problem. Any help is well received.
I am making a flashcard game with five subjects. It has buttons for moving forward and back,and buttons for switching to another subject The card instances for each subject are stored offstage, in separate frames (five in all), and their names are stored in arrays (five in all) Each time a button is pressed, the appropriate card tweens onto the stagepoint were still visible (not sure why, since the menu's on it's own frame), so I wrote a function to clear everything offstage whenever the menu button is clicked.My problem is weird: if you are in the math subject, switching to geography returns this error:
TypeError: Error #1009: Cannot access a property or method of a null object reference. at flashcardapp1_fla::MainTimeline/frame3() at flash.display::MovieClip/gotoAndStop()
I'm new to this OOP stuff, and I'm having a hard time understanding all of this.I'm trying to recreate in AS3.0 with classes a simple whack-a-mole game I created in AS2.0 using timeline coding.I've read through a lot of forums, but I still don't understand what exactly I'm doing wrong.Heres my setup:I have a movie clip named mrBunny (my girlfriend told me to change it to bunnies as moles were too ugly.). Now there are 6 instances of mrBunny on the stage, each named mrBunny0-5.The mrBunny symbol is linked to the com.mrBunny class.The class has a method called randomPlay(); which I use to randomize the animation times of mrBunny.I also have a button on the stage with the class stageBtn.
I'm working with Flash Builder 4.6 as an IDE and Flash CS5.5 to create library items. The problem is - when I put an instance of a library item on the stage or inside of another item, Flash Builder fails to detect the instance name that was declared in Flash CS. This doesn't prevent the code from compiling just fine though.
I understand that the IDE only sees the fields that I have declared directly in the .as file, but it really hinders me that I the IDE goes crazy when I do this.
Is there any way to circumvent this - other than dynamically creating and placing the instances?
I was just wondering if there was a way to find all button/dynamic text instances that are on stage. This would allow the dynamic creation of array instead of having to manually create this array.
Is there any way to iterate through instances placed manually on the stage in Flash IDE? For example I have 3 "Dog" class instances placed on the stage and I'd like to access them all from document class without giving them instance names.
Say, for example, I have a car on a flat plane. It can move either left, up, right or down. I also have 10 obstacles on the stage. Each time the car hits one of them it should automatically turn to avoid it. I could loop through each obstacle and check if it is colliding with the car but a better approach would be to make an obstacle class that checks if the car is going to collide with that obstacle and if it does, make it change direction. My problem though is what about if I had 5 cars? Would the obstacle class have to loop through each of the cars to check if any are colliding with it? My main concern with this is how much the performance of the program would be affected. I imagine with only 5 cars the difference would be insignificant, but what if I had 1000 cars and 1000 obstacles? Going back to the first example, it is easy to see how you can use a class as opposed to using a loop but with the second example, I just don't know.
I don't know why! I never click the "export for actionscript" and the symbol names in my library are given "Onename" "SomeName", rather than "MovieClip" ...
in the code below, there is something wrong with this line: movieClipsStage[n].addChild(thumbList[n]); import fl.transitions.Tween;import fl.transitions.easing.*;
var thumbArray:Array=new Array();var movieClipLoader:Loader;var movieClipsStage:Array=new Array("mc0","mc1","mc2","mc3","mc4","mc5"); var myXMLInfo:XML;var thumbList:XMLList;var myXMLLoader:URLLoader=new URLLoader;myXMLLoader.load(new URLRequest("Data/myStarList.xml"));myXMLLoader.addEventListener(Event.COMPLETE, loadComplete);