ActionScript 3.0 :: Cannot Create Dynamic Property On SuperClass
May 25, 2009
I'm not sure if this is a bug, or an expected behavior, but, if you try to call super["dynamicProperty"], given that superclass is dynamic, it will throw error telling you that the dynamic class <name of dynamic class> has no property "dynamicProperty". BTW, the extending class is dynamic too.
Sorry to bother you with this thread, because I'm sure it's pretty obvious, but I can't see through it. With this following code, I can't access the visible property of the Sprite class...
I'm trying to override a subclass's method but I think I need access to the superclass one higher up in the hierarchy. So I'd like to do something like super.super.methodName();
FYI, the actual problem I'm trying to solve should be explained by my code below:
public class A extends UIComponent{ override protected function keyDownHandler(event:KeyboardEvent):void{ super.keyDownHandler(event);
[Code]....
If I use the class A's KeyDownHandler method, you will see that remove() is called regardless. However, the docs state that I need to call UIComponent.keyDownHandler whenever I subclass UIComponent. Of course this works for the first subclass, but not that subclass's subclasses.
I realise that I could put the functionality all into A with something like if(this is B){...} but that seems to me to be a hack.
I have 3 .as files at the moment as follows: Launchers.as
Code: package { public class Launchers[code]...........
Now what I'm trying to achieve is BounceGrenade and RocketGrenade classes to inherit the "maxAngle" property from their superclass "Launchers" so I could use code like:
I am using a regular Flash object as a simple data container, and I want to remove a particular property of that object. Then that object gets passed on to a for..in loop. But even after using delete to remove the property, the key still shows up in the loop.
For example:
var obj:Object = { a: "a", b: "b", c: "c" } delete obj['b']; for ( var prop:String in obj ) {
[Code].....
So deleting the property seems to be the same as assigning its value to null.
Is there any way to immediately remove the property from the object altogether so that it is no longer looped over in a for..in loop?
It is not sufficient to check the property for a null value since a property with a null value is not the same as not having the property in the first place, and represents a different state. I don't want to set the property to null, I want to remove the property.
I am working on a project that is utilizing Flash Professional and Flash Builder. The art team creates assets in Flash Pro and publishes the project as a SWC. I then copy the SWC into my Flash Builder project's lib directory and access the assets through that. The art team is creating a lot of the same type of thing; let's say they're making lots of lizard symbols/components. All of these lizards have similar animations (walk_left, walk_right, etc.) and because of this they all have constants defined in ActionScript (WALK_RIGHT_START, WALK_RIGHT_END, etc.) relating to the keyframes in their animations.
From the Flex side of things, whichever Lizard I load, I want to be able to tell it to walk left. So I created a superclass in Flash Professional and now all of the AS classes for the lizards in Flash Professional extend this class - Lizard.as This is all fine and good, but when I want to add more complexities to my lizards, I don't want to have to open up the Flash Pro project, edit the class, recompile the SWC, send it back to Flex, and then test it out. I want to be able to have my Lizard superclass available for editing in Flex - so I made another superclass in Flex: Lizard.mxml
In Flex, each lizard component (like Gecko.mxml) currently extends Lizard.mxml, and each contains an AS component defined in the SWC (Gecko.as in this case). This seems pretty convoluted: An mxml component extending an mxml superclass, containing an AS component which extends an AS superclass. What I'd like to do is define one superclass in the Flex project, have my Flash Pro defined components extend this class (which is the part I believe to impossible), and then have my Flex Components (Gecko.mxml) extend those.
1: Is there a way to set superclass variables from within a subclass? I can't seem to accomplish it.
2: Also, why does it seem when I call a function, the superclass version is called instead of the sub? I construct the class using the sub, so whats the matter?
3: In one of the classes, I want to push a MovieClip it creates into an array, it works, but I get an undefined, then the value.
4: I have 3 levels of inheritance in my classes Specials -> Human -> Player, who do i call each one correctly from one another?
I have a Hero class that extends a Unit class that extends a SelectableObject class.[code]I have a movieclip in the library that links to the Hero. Inside the movieclip is another movieclip with the instance name "selector".In the Hero I can use selector.gotoAndStop (n) because the movieclip is linked to that class, but I can't do that for the SelectableObject because it's not linked to that.Is there a way to make selector.gotoAndStop (n) work for the SelectableObject? I can't even do var something:* = this.selector because the movieclip isn't linked to it.Or should I just remove the instance name for the selector in the movieclip so I can declare var selector:* = this.getChildAt (1) in the SelectableObject (the selector being the second child)?
What I would like to do is to call a method from a superclass in a subclass. Specifically I want to be able to add the subclass as a child of the superclass but without physically having to type addChild in the superclass (but I will have to type it in the subclass). For now I'm just trying to call a method in the superclass that draws some text from a subclass.
This is basically the opposite of what I was trying to do earlier. I just need to know how to change a subclass variable from it's superclass. So if I were to make an object in a class how would I dynamically change a variable in that object from the original class that I made it in?
Suppose this is the main function of my main class:
public function MAIN() { new OBJECT_square().CREATE(this,100,100); OBJECT_square.X = 40; }
Changing the X value in this way is not working. I realize I can set/change the X value when I make a new subclass but I need to be able to change it as I go. I also realize I can change it from within the subclass but this isn't what I want.
For some time now I have been making a very easy game for iPhone in flash using as3. Recently I came in contact with a small problem, which is why I am posting this!
The problem: I have a superclass from which everything derives. In the superclass I initiate and place an Object on stage.
1. var myObject:typeA = new typeA();
2. stage.addChild(myObject);
As you can see this object follows the class 'typeA' which, ocf, has its own actionscript file. Inside of this file I have declared a global variable of type string.
What I want to do is change the varbiable on the new object from the superclass. Therefor I tried as following:
1. myObject.myVariable = 'someSortOfString';
Unfortunatly it didn't work and so I wonder how to do this; change a subclass' variable from the superclass.
In Actionscript 3, if I'm given a Class object, is there any way to determine if that class extends from another given class? I don't want to instantiate the class to check it with the is keyword, though.
I have an abstract superclass which has around 300 subclasses. I would like to log when certain methods on this parent are called, and I'd like to know the name of the subclass thats making the call. Is there any way to do this without rewriting all my subclasses to explicitly pass their names upwards to the parent's logging method? E.g., let's say I have a superclass Foo with a method writeLog(str). Foo has a subclass called FooBar, which calls super.writeLog("hello"). Can writelog just inherently figure out that a FooBar called it, without the need to rewrite everything so that we have to call super.writeLog("hello", "FooBar") ???
I have a class which takes a Vector.<DisplayObject> in it's constructor. I had expected it to be ok to create instances of this class by passing Vectors of types that are subclasses to the DisplayObject class (in this case Sprite ans SimpleButton). But it doesn't work. And casting these Vectors as Vector.<DisplayObject> when declaring the instances doesn't work either. [code]...
So, how would you create a class that can access a variable in the class where the subClass was created(superclass), I realise this might be unclear so in example
PHP Code: package {import flash.display.MovieClip;public class Main extends MovieClip {public va demoString:Strin = "TEST";public static var newClass:SubClass;public function
just made my jump into OOP and I am quite excited to find out such marvelous things that I did not know. If someone has a quick answer or can point me in some direction please reply to this question: How can I, if at all possible, modify a function from a superclass but preserving all of it's functionality? I know about the "override public function" but that is not precisely what I want.
So, how would you create a class that can access a variable in the class where the subClass was created(superclass), I realise this might be unclear so in example
What passes to a subclass extending from a main or superclass, be it document or extending from a general MovieClip class etc? Does it pass absolutely everything from the superclass? That is to say, instance functions, variables defined inside these functions etc? Or just constructor variables? What passes through and does 'static' affect the transference of these values?
I've run into an extremely odd problem. I'll give a code example to start. This is the superclass Building.
Code: public var allowsEnemyMovement:Boolean = true; public var information:String = ""; public var buildingName:String ="";
[Code]...
Now here's the odd part. Only SOME of the variables defined in the superclass do this. the variable information, buildingName and health all will take the default value from the super class. But the variable defenseValue will take its value from Factory's constructor. What am I doing wrong here? I would like to keep default values in the superclass so that I don't end up with null pointer errors later just in case.
I'm trying to set up a large project that has a "shell" application that preloads and eventually displays a bunch of SWFs as a "slideshow". Each SWF could be authored by different people but will reference a base document class so they exhibit consistent behaviour. One of these behaviours is to be able to localise the slideshow into different languages. Since each SWF could have a different number of textfields that need to be localised embedded into their main timeline, the SWFs each must declare their stage instances in their document class. In order to implement the common functionality (such as a "localiseText()" method), I have decided to package all common functionality into a superclass (what I'm calling "Base Class" in this example) and using a subclass as each slide's document class.
This Example:This is a simple example I set up because in my actual project my compiler was throwing a coercion error when I tried to cast the Loader.content as my external class. The structure of this example is the following:
+ loader.fla : this is the main "shell" application. + SWFLoader.as : the Document Class for loader.fla + external_1.fla : this is the external SWF file that will get loaded and displayed
[code]....
I've set it up this way because a hypothetical external_2.fla might have different public variables to declare its stage instances so would need a separate implementation of ExternalBase (presumably External2.as).
The code (in reverse):
base/ExternalBase
[code]....
This just sets up the localiseText() method which is used in this example to change the contents of the text field. Since we don't know the name of the text field in the particular slide's timeline, we have to ask for it from the subclass' implementation of getLocalisableTextField(). We declare an abstract function here that needs to be overridden in the implementation.
I'm puling in a FLV via a NetConnection (NetStream), and I've got it all working well EXCEPT for the scrubber. Here's the code I'm using for the scrubber[code]...
I'm puling in a FLV via a NetConnection (NetStream), and I've got it all working well EXCEPT for the scrubber. Here's the code I'm using for the scrubber:
**** //Scrubber var videoInterval = setInterval(videoStatus,100); var amountLoaded:Number;[code]....
It's early days in my AS3 learning, and I'm looking for a little clarification regarding a variable typed to a superclass (in this case var mySpinner:MovieClip) which contains a reference to an new instance of a subclass (in this case Spinner.) I am trying to get my head around why my code compiles and runs and I am able to call the method rotater() on mySpinner even though mySpinner is typed as MovieClip, and the MovieClip class does not contain the method rotater().
On page 163 of the official Adobe Programming ActionScript 3.0 documentation it says the following, which I believe is related to my situation, but I am still in need of clarification: "Because each class defines a data type, the use of inheritance creates a special relationship between a base class and a class that extends it. A subclass is guaranteed to possess all the properties of its base class, which means that an instance of a subclass can always be substituted for an instance of the base class."
TypeError: Error #1009: Cannot access a property or method of a null object reference. the main idea is calling a method from subclass that inherit to a superclass.. here is the code
there are 3 classes in my library with base class movie clip menucaller mysqlurl background_mc menucaller and mysqlurl each have an .as file associated with them background_mc is just a white square in mysqlurl all 3 are exported for actionscript on the stage i have instances of of menucaller on mouse over of menucaller, menucaller summons mysqlurl via the .as file when i publish as .swf and navigate to the frame where there are instances of menucaller, the menucallers appear just fine but i get the error
ReferenceError: Error #1056: Cannot create property background_mc on mysqlurl. at flash.display::Sprite/constructChildren() at flash.display::Sprite() at flash.display::MovieClip() at mysqlurl()
[Code]..
i fixed this once before by just copying and pasting all of the layers into a new project, but its not working anymore
there are 3 classes in my library with base class movie clip menucaller mysqlurl background_mc menucaller and mysqlurl each have an .as file associated with them background_mc is just a white square in mysqlurl all 3 are exported for actionscript on the stage i have instances of of menucaller on mouse over of menucaller, menucaller summons mysqlurl via the .as file when i publish as .swf and navigate to the frame where there are instances of menucaller, the menucallers appear just fine but i get the error