ActionScript 3.0 :: Defining Classes And Constructors Methods?
Nov 24, 2009
It's not clear to me, where I have to define Classes and Constructor methods. In AS2 it was possible, to define a class "light" by defining a constructor method. In AS3, I read, a class can only be defined in an external AS-file. Is it still possible to use the constructor method inside the Flash-File or do I have to source out all my constructor methods and implement them into real classes into an external AS-File?
Is my understanding that there are no Abstract classes and you can't override or overload constructors of derived classes correct? Abstract classes aren't important for me but if it's possible I'd like to know how. But is there a way to overload default constructors and I'm just doing something wrong? Can we only override methods or can we overload them also.For a simple game I'm making, I'm not using FlexBuilder and don't want to for this project for specific reasons, so I'm using Flash and instead of using sprites and bitmaps I want to draw shapes in Flash and covert them into MovieClip symbols which I "link" for export as AS to use in my code. I want to make it a little modular so I can just change certain aspects of the code for different approaches.If I create a class Actor which extends MovieClip the default constructor has to be Actor() with no arguments. But I'd like my class to be able to have arguments like initial x and y coordinates. I know you can just create methods to initialize each part but I'd like to try and have a default constructor to do so.
In Flash I notice that if you derive a written class or built in class it requires the standard default constructor, "which I may be wrong about and I hope I am and someone could show me what I'm doing wrong", I found if you derive a class based on a symbol you linked for export as AS I can create a new constructor with whatever argument(s) I want (so this is why I'm making this post,if I can do this couldn't there be a way to override constructors?).
1) So I create a base class called Actor which extends MovieClip save it as Actor.as and default constructor of Actor() add whatever properties I want.
2) Then I create an object in my library, let's call it mcShip, then I link that symbol for export as ActionScript and have it's base class as Actor and name the class ShipMC.
3) I then create a new .as file and call this one ShipActor.as, this class ShipActor extends ShipMC and then I create a default constructor ShipActor(gs:GameScreen, xA:Number, yA:Number) and this works fine (also I create a method in Actor class called ActorSuper and call it from ShipActor with passed in arguments, since I don't know of a way to overload the parent class' constructor)
If I were to just have my mcShip with a base class of flash.display.MovieClip and I try to create ShipActor with the constructor above it says missing default constructor. The above 3 steps is the only way I can get it to work for now. Is there a way to overload the constructor? If not are there any other work arounds?
how subclasses,instances,and inheritance work. The below code isn't actual project code, it's theoretical code, generalized to a simplistic level so that we can talk about the big issues.Let's say I have animals_app.fla, with a "Dog" class MC and a "Cat" class MC. Both "Dog" and "Cat" are subclasses of "Animals"; animals_app.fla uses document class "Main".
Intuitively, I think Animals should declare that every subclass should have some animalSpecies, and each subclass will define the value of its own animalSpecies. It wouldn't make sense for Animals to provide any default value, because it will always be different per subclass. Is this correct? I had tried out some code similar to that below, and was perplexed because it seemed like whenever a subclass tried to define a value for its own animalSpecies variable, it was actually changing the value of the variable in the Animal class, but that's not what I want. How do I rewrite this code so that each subclass defines the values of variables it inherits from its superclass, without altering the superclass? And how would I define the value of variables for each instance of a class, so that I'm only changing the values of that instance, without altering the subclass?
Also, conventionally, what should be in my Main class? Only the addChild code which attaches MCs to the stage? Or should the values of variables be defined in Main? What am I missing? I recently read Foundation Game Design with Flash and didn't feel like the explanation was sufficient. I've tried scouring the web for OOP tutorials, but they're either too basic or too far over my head.where I should be defining values of variables for classes, subclasses, and instances?
I want to create a game using pure AS in FlashDevelop.
The problem is that there are some methods I want to use, and because I don't like copying/pasting code, i decided to define in classes. Here is an example:
[Code].....
When I hit compile, I get an error like Call to a possibly undefined method distance through a refference with static type Class.
Is there a way in AS 3 to list all classes and their associated methods? Or at least a way to list the methods within a particular class? It seems that it's all so overwhelming and although I'm well versed in Lingo and have a handle on the Lingo dictionary,I feel as though the AS 3 library is dauntingly big.
I have this problem from time to time with AS3 where I extend a Class and then try call methods and variables which are public from the new class but I get errors that method or variable doesn't exist. My IDE recognises the methods and variables though.[code]When I run the script flash hates it. I thought when you extend a class it was supposed to inherit its properties and methods?Does anyone else have these problems? I shouldn't have to cast it as Box. I swear I have this working in a project but cant see the different in setup?
my understanding of extending classes is that you gain all the functions and methods of that class thus You could over ride any one of them. How ever I am confused on weather or not you inherit and can over ride private methods of the class you are extending or if you have to have all methods public in an extended class.
From what I read, interfaces are basically classes for methods, right? If two classes implements the same interface, then they should both have methods described in the interface.
Now, how is this useful? Let's say I want to call foo()
I am trying to do an app that requires me to change the behavior of a few native methods and classes of a an application.I want to override methods such as:ExternalInterface.call, ExternalInterface.addCallback, flash.net.navigateToURL in a loaded movie.There are a few ways to do this for example:1. Getting the SWF's bytecode and decompile it. Then change the symbols table with my own class.2. Loading the other movie in my applicationDomain, by doing so, I would be able to rewrite it's own classes.o do (2) what I did was:1. Turn off the "-strict" flag.2. Turn on the "-es" flag.in the compiler and then do something like:
Code: flash.net.navigateToURL = function(u:URLRequest,window:String):void { throw new Error("yay it works");
I have a question about classes. I just learn that static means that functions and/or properties are specifics to a class, but is it a synonym of private? And why statics (not available to any instances?) properties and/or methods can have a public (available anywhere else (timeline)) access modifier? PS: I just start with classes.
I have an application using a class that was originally a MovieClip exported for Actionscript by Flash. I have not been able to figure out how to add new properties to this class.
Imagine I have a game with a base Entity class, with an init method that takes no arguments. Now I have a Wizard class, but I want to pass in 2 parameters, say speed and strength. In AS3 (and I believe Java and C#) I will not be allowed to do this - it is an "incompatible override" because the method signatures won't match. Now I could just make an "initWizard" method instead, but then I have the problem of the init method of each class potentially having different names. I need solutions that work in AS3, Java or C#.
Yesterday I found myself wondering, what is the difference between either having a class with methods that are all static, or simply giving your class the static attribute?
currently i am setting up a class to handle a movie clip, tweening from one spot to another. I want to be able create an instance of this class, pass in 2 arrays (an array of x pos's, and an array of y pos's), and also pass in the mc to be attached and thecontainer to attach it to.I currently have this
I've been rewriting a code from AS3, to AS2. I got stuck when i tried to make a constructor have default parameters. The default parameters are determined by variables.In AS3, it would simply be:
Why doesn't the Flex framework's mxml language support a constructor for components or accept constructor arguments for components? It's as far as I know not possible to declare an ActionScript object in mxml if it takes constructor arguments. I'm curious about the reason. Is it a design choice by Adobe or related to how declarative languages work? For example, why not allow:
Not sure if this is possible but it has been annoying me for the least few days. Basically im aware i can do this to instantiate a class
[Code]...
However, if i pass in a string for the SOME_VARIABLE , is there anyway i can get the above to work? If i pass a string in i either get no error, or the fact that the datatype is incorrect. Im using an xml file to build up an interface. but the value of SOME_VARIABLE is passed in from the xml file as a string. I want to be able to detrmine which class to create from this string.
The examples I'll use don't do anything - they're classes without ANY members - no variables, methods, anything.
Let's say I extends Sprite and call it MySprite.
I save it in test.core
[code]...
Now I create another custom class called MyWindow that extends MySprite.
I save it in test.windows
[code]...
Then I create another class that extends MyWindows (the example I'll use is a document class - but that doesn't matter - I've tested using an instance too).
[code]...
Notice that I'm not even trying to instantiate the helper classes - just having them there throws the error.
If there is only a single helper class, everything runs fine.
Also note that - as far as I can tell - this only happens when extending one class from another package, then extending that class with more than one helper object.I'm pretty sure there's no namespace bumps or typographical errors, as this is a very pared-down version of the original application.
EDIT: seems the problem exists even without the crossing packages - even extending MySprite in the document class with multiple internal classes generates this error.
I am creating a library in AS3. Inside the library I make use of a bunch of classes/packages that need not be exposed to the end user of my lib. I want to only expose one of these classes.
I guess my questions are:
1) How are libraries commonly distributed in AS3?
2) Is there a .jar equivalent in AS3 that developers can include, but will only have access/knowledge of the classes I've declared as public?
I have an actionscript project which uses visual symbols from an SWC. I have a CheckoutButton which has the following class associated with it (compiled into the SWC in Flash CS3).
I am trying to get a dynamic text box embedded in a button to populate on (XML) load but am having trouble with the path. The text boxes not embedded populate just fine. I have attached my FLA and my XML is below.
I posted a problem recently and I think I was asking too much too soon, I apoligise for that one. I want to try again with my problem. Basically I am making an interactive circuit builder in flash mx for 8-10 year olds (does anyone remember crocodile clips?).
I am trying to define a CSS style dynamically. how to get around hard-coding the values this way:
code: var styles:TextField.StyleSheet = new TextField.StyleSheet(); styles.setStyle("mainBody", {color:'0xff0000, fontSize:12});
I tried something like this, but it isn't working:
code: var styles:TextField.StyleSheet = new TextField.StyleSheet(); styles.setStyle("mainBody", {color:colorVariableFromParentMovie, fontSize:sizeVariableFromParentMovie});
I am using a movie clip with graphics as a cursor.
However, it appears that the actual 'hit' area of the movie clip is related to specifically the normal arrow cursor.
I would like to be able to define an area of the graphic, in this case it's a hand holding a billy club so I'd like just the tip of the billy club the 'hit area.'
pretty much just saying there is 10 elements in it. I define each function as "land", for example. Then in the same function I redefine a random element as "water".
(It is a bit more complex, this is simplified!)
Upon executing this I get the error:
ActionScript Code: TypeError: Error #1010: A term is undefined and has no properties.
if I put the second bit in a new function (the random water part), there is no problems and it executes perfectly. Obviously I cant define an element twice in the same function.
this is my first attempt at defining a function all by myself and surprise it don't work! I'm sure you can see from below what I'm trying to create.
[Code]...
Basically dependent on the hour the text displays a relevent welcome message. Once I cracked this I was going to use the same code to alter an animaton of a scene to reflect the time of day.