ActionScript 3.0 :: Referencing Stage From Within MovieClip Or Class
Dec 9, 2009
I'd like to know how I can reference root stage values from within a movieclip, or even worse, from a class. For example, I have a class called Bground.as. It does stuff, according to current stage size - so if someone were to resize the window/browser, Background updates in real time and does something fancy while it's at it. To do this "fancyness", I need stageheight and stagewidth. However, simply pointing to them does not work.
Here's the simplified ActionScript Code:
package klaseFP{
// imports
import flash.events.*;
import flash.display.*;
public class Bground extends MovieClip{
[Code] .....
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at klaseFP::Bground()
at FullScreen_03_fla::MainTimeline/frame1()
Background works as a document class, works perfectly in fact. However, if I use it as the class of a library object, error 1009 shows up. Same thing happens if I simply put the code into the timeline of the library object - stage referencing simply causes it to break. So, how do I dynamically change the values of variables in Background, according to values in the main movie/app?
Ok, this is one of those walls that I know once I can jump over it, I will be a much happier developer again.
I've done tons of reading, and think I have a firm understanding that the general consensus is that if you want to reference something, it needs to be added to the display list, using addChild().
I hate to be defiant, but what if I don't want to?
Or at the very least, what if I want to add a movieclip class to the stage using addChild, and then reference objects inside it?
It is much easier this way than what most people recommend - adding 15 objects via addChild, then setting the x and y for the, etc.
That said, I'm all about using classes and using as3 the way it was meant to be used. So what this is, is a best practices question I guess.
HERE ARE THE STEPS I'M TRYING:
- Create new flash document
- Draw graphic symbol bg, with text field over it, select them, convert to movieclip symbol, and export class name "box", then delete it from stage
- Add document class .as file, which simply adds that class "box" from the library, to the display list using a simple addChild()
- Set a name for that box using box.name = "test" let's say
- Do a simple trace like the following - "getChildByName('test').textFieldName" - it shows up great
- So then, I'll now try to set the text by doing this - getChildByName('test').textFieldName.text = "yo";
That last line above, is what doesn't work. I know I'm referencing wrong, but how would a pro as3 developer, reference something on the stage within a movieclip class, from the document class?
How to access stage elements from within a class. buttonControls.as
Code: package { import flash.display.Sprite; public class buttonControls extends Sprite { // Navigation Hover Color var hover = "0xF1E960"; var normal = "0xFFFFFF"; public function changeColor(object, color){ [Code] .....
I created a custom class in a .as file. I then linked this custom class with a symbol from the library in my .fla file. However, I can't reference stage.stageWidth in my custom class file. I get a null object error.
I think this happens because the custom class file is associated with a symbol on the stage and not the stage itself. For example, if I set the fla file's Document Class to the name of my custom class I can reference stage.stageWidth in the custom class. But I don't do this because I am creating multiple instances of the symbol on the stage. In order to do that properly i found I have to set the class in the properties panel of the symbol to the underlying class which then defines how each symbol behaves.
Under this type of linkage, is there a way to reference the stage width from the class? I've tried root.stage.stageWidth and parent.stage.stageWidth to no avail. I also made sure to import flash.display.* in my custom class. Below is the code for my .fla file and my .as file. In the .as file you'll see the line "x = Math.random() * stage.stageWidth;". This is the line giving me problems. I could hard code it, as I do for the y variable on the next line, but I'd prefer not to in order to keep the code flexible.
I'm having problems referencing the stage from an external class. I've tried : Code: stage.addEventListener(MouseEvent.MOUSE_UP, onUp, false,0,true); And also Code: MovieClip(parent).addEventListener(MouseEvent.MOUSE_DOWN, onDown, false,0,true); But no luck. Can I not do this? I'm making a pencil class that I want to be able to reuse. I also tried "this" and while it didn't throw and error, it didn't work either.
I have a media player that I am codging together, one that will play either videos or MP3s depending on the variables it is passed. The video player part works fine. The MP3 player controls are all actual physical MCs on the stage; each one has its own AS class file as part of the package, but there is also a lot of AS that is happening in the main FLA as well. Messy, I know, but it mostly works great.
The MC on the stage in the main FLA is properly linked to the class file via Actionscript linkage, and the control itself works. However, I am trying to make some aspects of the control respond to variables that are set within the AS on the timeline of the main FLA, and I cannot seem to pass values to the control no matter what I do.
I have a media player that I am codging together, one that will play either videos or MP3s depending on the variables it is passed. The video player part works fine. The MP3 player controls are all actual physical MCs on the stage; each one has its own AS class file as part of the package, but there is also a lot of AS that is happening in the main FLA as well. Messy, I know, but it mostly works great.The MC on the stage in the main FLA is properly linked to the class file via Actionscript linkage, and the control itself worksHowever, I am trying to make some aspects of the control respond to variables that are set within the AS on the timeline of the main FLA, and I cannot seem to pass values to the control no matter what I do.The following variable is set in the main AS:Code:var notPlayedYet:Boolean = true;I also have some flashVars being passed in from the html, and these I can reference with no trouble from the main AS - the relevant one is:
I feel like I should know this by now, but I'm having trouble. I want a function in one of my child functions to increment an integer in its parent function.
Hey guys. It's been a while since I've used Flash and I am still trying to wrap my head around Actionscript 3.0 and the way it works; I am so used to the way AS2 works.I have provided the code below, it's very simple, so you might be able to skip this explanation and just take a look at the error and the code:
- I have made a movieclip called HeroMC in my FLA.
- The HeroMC movieclip has the AS Class linkage of exactly the same name, "HeroMC".
- I have made an actionscript class file, HeroMC.as, to house specific variables for my hero; such as Name, Age, xPos and yPos.
- I have also made an actionscript class file, Main.as, the document class for this FLA.
- In Main.as I instantiate HeroMC using the variable hero, and then run the function addHero() from my constructor.
- addHero() is a simple stage.addChild(hero);
This all works perfectly fine and it adds my hero to the stage. However, the problem arises whenever I try to reference one of the variables from HeroMC.as. I am met with this error - I will use the variable xPos as an example.
Here is the error:
1119: Access of possibly undefined property xPos through a reference with static type HeroMC.
It is obvious this is a very simple problem, but I have searched Google, Kirupa and Flashkit for an answer, but none of the threads I find discuss my specific circumstances and I am unable to find the specific information I need to.
On the main stage I have a button that I have made invisible once the file is loaded. Inside a movieclip I have on frame 15 the following actionscript 3 code
button_mc.visible = true;
I want the button to become visible at the end of this movieclip. I am not using an external as3 file, I am putting the as3 code in its own layer on the first frame.
I know it has something to do with the path to the button, but I cannot figure it out. If there is anyone who can point me in the right direction for referencing instances by instance name that reside on the main satge from inside a movieclip
I have a document class with a child MovieClip on the stage. I have the clip already on the stage because it's part of an complex layout provided by the designer and it seems easier to leave it on the stage than to use addChild (since I would have to add about 60 objects).What is the best way to reference the document class from inside the child MovieClip class?
I haven't gotten a handle on coding classes and the appropriate syntax with all the "public" "private" "static" keywords, etc. Anyway, one thing I miss in AS3.0 is having "out-of-the-box" global variables and functions. I've read a lot of forums and articles about making a simple "MyGlobal" class that could hold variables and functions which could be called from the timeline as "MyGlobal.doSomething()" However, I seem to be running into a problem trying to reference "stage" from within one of the global functions... I imagine this is because "stage" is an instance property. I'm basically trying to add/remove an event listener to the stage whenever the global function "MyFunction" is called.
I need to increment an integer variable in a function within the document class upon transpiring event in another class. I can't seem to figure out how to call the function and reference the variable.
I have an enemy on the stage that reads whether it's being hit by a bullet by a hittest. There's a for loop inside the enemy's class that looks for all the bullets and names the bullet that's hitting it "hitBullet". What I'd like to do have an easy way of seeing what type of bullet is hitting the enemy. I'm basically looking for something like
if (hitBullet == RegBullet) { //do regular bullet dying }else if (hitBullet == ClusterBullet) { //do clusterbullet dying }
, where RegBullet and ClusterBullet are classes. But I have no idea what hitBullet is equal to when a ClusterBullet or RegBullet hits it. I traced hitBullet to see what it would return and got "[object ClusterBullet]", but I'm not sure what that would be in the actual code.
Does anyone know if it's possible to link a MovieClip on the stage to a class? I have a MovieClip on the stage called: square_mc and I have this Move class (see attached code). Of course when I set the class linkage of square_mc to the Move class, square_mc moves down the screen, Move is working. But how would I attach the Move class to square_mc at runtime, when it's on the stage?
public class MyClass extends MovieClip { public function MyClass():void { my_mc.addEventListener(MouseEvent.CLICK, action); } private function action(e:MouseEvent):void {
[Code]...
I can't able to access the my_mc(placed in FLA) movieclip. How do I access?
I'm getting really tired of AS3 now because I cant get it to do basic things like hit tests which were so easy in AS2. Basically, I generate a number of fish of varying scale, speeds and directions using this on the first frame of the timeline and the constructor function in the fish.as file:
ActionScript Code: function DisplayFish() { for (var i:int = 0; i < 20; i++) { var newFish:fish = new fish(); this.addChild(newFish); [Code] .....
What I want to do is rather than setting a max / min x/y use a hit test with a side wall MC on the stage, and a hit test between this instance of fish and all other fishes so they bounce off each other. I've tried so many ways of hit testing from within the class with MCs on stage but just cant get it to work. ActionScript Code: if(this.hitTestObject(root.LeftWall)){ directionX = 1; }
Does anyone know if it's possible to link a MovieClip on the stage to a class?
I have a MovieClip on the stage called: square_mc
and I have this Move class (see attached code).
Of course when I set the class linkage of square_mc to the Move class, square_mc moves down the screen, Move is working. But how would I attach the Move class to square_mc at runtime, when it's on the stage?
If you put a moviecilp on the stage and then write a class that extends movieclip, is it possible to make it so that this references inside your class refer to the movieclip on stage.
E.g. this.x would refer to the x reference of the movieclip on stage.
1.I have a MovieClip in the Library. There is a named and dynamic text box in the MovieClip. In Frame 1 of the .fla, I construct the MovieClip from the class StatusBoard and add it to the stage. There is one setStatus method in the class to set the text. This works fine.[code]
2.I have a bunch of buttons that I created from a class called LinkButton.as (they are MovieClips, not _btn buttons). FWIW, they are attached to other MovieClips, but they work fine. The trace output is fine. What I am trying to do is have the rollover change the text in the billboard.[code]
3. In lay terms, I used addChild to add a MovieClip with a dynamic TextField to the stagw and I want MovieClip buttons created from an .as class to be able to change the text on a rollover.What I can't seem to do is actually reference the billboard that I added using addChild from the .fla.The buttons work and trace the desired text, I can't seem to send that text to the billboard.
I've created a custom class (not the document class, otherwise there would be no problem) and I want to be able to access a MovieClip that is sitting on the stage.
How? MovieClip(parent), MovieClip(root)... don't work. What's the proper procedure?
Also, can I pass the MovieClip from the Document Class to another custom Class?
Does flash have an equivalent to Flex'sApplication.application.[insert application method or propertyI want to get access from an as3 class file to the mainstage. a call to this.root from the stage to the class will notwork because I need the root object stage to execute an addChild
How can I achieve this ? I tried MovieClip(root), MovieClip(parent), stage,mytextfield.text = ... etc. They all throw an null object reference problem.
I have a "box_mc" movieclip on the root of my stage and I need to select it from within my Document Class. I thought Stage.getChildByName("box_mc") would work, but it just returns null.