ActionScript 3.0 :: Interfaces - Creating Empty Functions In The Base Class And Overriding Them
Jul 19, 2011
I hsve a setp where a couple of classes inherit from a base class (events, plus common math). All derived classes implement the same set of methods. Another part of the program wants to instantiate any of these classes. So far I was creating empty functions in the base class and overriding them. Could an interface improve on that? I tried to list the common functions in an interface and use that as a datatype, but that would not let me use functions that the base class already inherits, in particular event dispatcher. Would I need to add these to the interface?
I am much more familiar with Java's semantics of class and interface than with Actionscript semantics, but I have an example of some code that works in Java and doesn't work in Actionscript. This descrepency is a serious problem in that I am trying to code generate my Actionscript value objects from the Java DTOs and unless the semantics are the same, I am in deep trouble.
Here's the code that works in Java and fails to compile in Actionscript:
[Code]...
I don't understand why class B throws a compile error about an incompatible signature for "makeCopy" when clearly interface B extends interface A...thus there is no violation of type or incompatibility. If this is just an Actionscript limitation, can anyone suggest a way to recode?
NOTE: I already tried changing interface B to this and it threw an error in interface B (which work in Java):public interface Ib extends Ia {function makeCopy():Ib;}
I'm trying to create a new instance of a MovieClip when the original one has been used. Would sound easy enough. Just use: var
instanceName:ClassName = new ClassName();
the class name/mc in the library im trying to duplicate is MCg1 so
var instanceName:MCg1 = new MCg1(); right?
However, the particular object in the library i'm trying to duplicate has a base class that is an external class file (just to control it's drag drop functionality)... i.e baseclass is not set to the standard flash.display.MovieClip, or whatever the case maybe. So i end out with a: TypeError: Error #1009: Cannot access a property or method of a null object reference.
I have a project in which I am using classes.I want to use a class in where from a xml object I create an array of movie clips using createEmptyMovieClip.[code]
It seems that Actionscript doesnt support defining static functions in interfaces. Whats the reasoning behind this?I think it would be useful to have that ability but I'm sure there must be a reason why its not there.
I have two interfaces that declare functions with the same name but incompatible signatures:
interface IDog { function bark() : void; }
[code]....
1) Missing 'public' qualifiers in the class definition were a typo. I fixed it.
2) I missed an additional requirement that interfaces CAN'T be modified (for the purpose of this question). In the real project they're defined in two different libraries that are a part of a large project. Multiple classes implement both interfaces (separately). So, any changes of interfaces will require cascading updates of all those classes, recompilation, testing, etc. So, I wanted first to find out if there was a solution without such intrusive modifications. It doesn't seem there is.
I'm looking to speed up my game, and I know that people keep saying the default prototypes are slow, and so I'm wanting to swap them out with better ones, like I found one that makes split() 10x faster than default...
I don't know if this is the right term "overriding timeline functions"... I'am making presentation wich has 8 navigation buttons..the presentation goes like this...when you press one button it goes to this buttons segment and play's it, when is finished it comes back to navigation by action gotoAndPlay ("menu")...myproblem is the last button...wich says Whole presentation...i cannot duplicate the presentation because it has too much keyframes and max is 16000 (i am not master atFlash )...so i would like somehow to cancel all the gotoAndPlay actions if it is possible?? so when i click the last button (whole presentation)...the playback doesen't jump back to menu...but plays til the end.
I'm making a game which loads map .swfs at runtime. The maps will contain graphics and code, which can both vary from map to map. I've decided to make all the maps implement an interface, so they can all be used in the same way by the game. I'm using a .swc to contain the interface, like in this page.
I can get classes to work in the .swc, but not interfaces!
I'm using Flash cs5, and flashdevelop for editing, in AS3. Here's how I've been doing it:
1- create map.fla with a symbol called Map, and a Map.as:
I'm working on an isometric-view prototype game, and I thought a good way to do the collision detection would be to put four empty movie clips on each of the character's base corners (it's a cube), convert those corner's _x and _y to the Stage, and go from there. Problem is, how to get it to work.My character is on the stage in an otherwise empty "clip" MovieClip. Here's what I have inside my character:
Code: onClipEvent(enterFrame){ var point:Object = new Object(); point.rightX = right._x;[code]....
Whenever I trace any of these, it always traces the local coordinates. Otherwise, everything is fine.
On my personal project, I'm starting to use tons of interfaces and I got to thinking how nice it'd be to know which of my class' members serve which of its interfaces. For instance, my class might implement 5 different interfaces, but I only want to see the members that play a role in 1 of those.
I would like to make a little app to test out the Accelerometer class. I was thinking of using a Loader to load the swf, and replacing the Accelerometer with my own copy. Is there any way to do this? If it's not possible, how could I do this with a custom client?
I am defining this function in one of my classes:public function onUse():void {};Then in another of my classes (let's call it "class2"), I create a object of this class, and then want to override this function with another one. After some Google-Fu, I have found this, and used it...
I'm slightly new to Flash CS3 + AS3 combo, so its more of a lack of practice question. My question stems from the problem described here http:[url].... . Note, its not the same problem, its a new one.The Problem ,So I have multiple library assets (which are on teh stage) and I want to assign similar functionality to all of them.
Attempt 1: So I create the n assets, create a custom class in AS3, link them to Flash CS3 and obviously enough it gives me the error that multiple assets can't be linked to the same class.Obvious enough to understand (well not completely, because from a programmers background it doesn't make sense).
Attempt 2: Same as attempt 1, but instead of linking all the assets to the same class I make the base class the same class, and let the derived class be dynamically created by Flash on compile time.So the linking works, but the problem is, in my base class I have a method which does something (say an tween) on a child of the library asset. So if the assets on the stage/library are called asset1, asset2, asset3 (same name for asset name, class name, id name), each of them has a sub-movieclip called ... say 'foo'. now if I manually wrote a class for each asset, I could do 'this.foo' to play with the sub-movieclip. However since this functionality is in the parent class, I'm unable to do it.
P.S. If you're form a programming/OOP background, its basically a abstract class problem. My Base class knows how to doSomething(), but it needs aSomething, which is defined in the Derived classes. However I found out that AS3 classes don't support virtual(C++ )/abstract (Java) in the true sense of the word (unless I missed some obvious documentation).
Let's say Class A has the flash.events.Event imported. Now let's say Class B extends Class A. Why in the hell do i need to import flash.events.Event in Class B? It makes no sens at all to me.
I am working on a Flash demo (all AS3) that requires a scrollbar. I wanted to create my own so on searching I found this Kirupa tutorial. I learned it an incorporated everything (also went well beyond) and the end product works nicely. There is one aspect of the code provided in this tutorial that has me very confused and, although my code includes it and everything works, it bugs me to not understand it. It's this part of the Scrollbar class:
I have this Fla which contains a symbol that is linkaged to a certain class that is in my project. That class inherites a base class named CMovieClip which resides in one of the libraries that is in the class path (and inherites from MovieClip).Of some reason, every change that I do in the base class doesn't seem to influence the resulting linkaged class, much as if this library is cached somewhere that I can't feagure out.I tried to create the same conditions in a separate Fla but it does not repeat the issue.I tried to duplicate the symbol but the issue isn't solved that way.
I created a movieclip with a star. Then, I creates a document class and I named it as Main.as.
In that document class I wrote: package { import flash.display.*; public class Main extends MovieClip
[Code]....
I´m not posting here all the code, but you can easily see that I´m using x_origin and y_origin variables to keep the original position of the movie clip. I will use them to move the star back to the original position.
The problem is that instead of being 20 and 30 respectively, tracing them I see that they are both ZERO. So when I drop the star, instead of going to x=20,y=30 it moves back to x=0 and y=0. I´ve to get the star position relative to stage, but I can´t find anyway!
I am creating a Weapon class for a game and the weapons itself will be the sub classes. The sub classes will hard code some values (such as max ammo and the weapon name).
I trying to access this declared data in the base class constructor, at the moment it's not outputting the values. Is this possible?
My current workaround is creating a protected method in the base class to trace the information and calling that method in the sub class's constructor, this works fine but this doesn't seem like the most efficient technique?
I have an mc called sunny. In the properties panel I export her for actionscript. I put Sunny in the main class and Drag in the base class. The reason for this is that I want her to be draggable. I can't use Drag in the main class as another object is using that name. The Drag.as has the drag functionality. Why can't I drag her. I already have a solution - I wrote a specific class for her and extended the Drag class. However, if I have 10 mcs I'm not going to write specific classes for all of them. Summing up: Using the base class Drag in properties panel - why isn't she draggable?
I have two SWF files which I shall call container and slave. The slave file contains a movieclip that extends from a class I shall call base. base extends MovieClip and is compiled into an SWC. slave includes this SWC as a runtime library, while container includes it as merged (and does reference it so it should be compiled into the container SWF).
The container loads the slave like so:
bgURLRequest = new URLRequest(slaveUrl); var context:LoaderContext = new LoaderContext(false, new ApplicationDomain( null ), SecurityDomain.currentDomain); bgLoader.load(bgURLRequest, context);
When this loading happens, I get the error that class base was not found. I suspect this has something to do with the presence of the ApplicationDomain in there. I'm not sure what it does exactly, since I didn't write this loading code myself (but I do know that it's there for a reason so it can't be simply removed).
I have two SWFs: main.swf and external.swf. main.swf needs to access some methods in external.swf, so it loads external.swf into itself and uses getDefinitionByName("package.Class") to access the class and one of its methods:
var ExternalClass = getDefinitionByName("package.Class") as Class; var ClassInstance = new ExternalClass(); var NeededFunction:Function = ClassInstance["NeededFunction"] as Function; var response:String = NeededFunction(param);
Now, I need to extend the functionality of NeededFunction (which is a public method)... I know it's possible to override public methods, but how would I go about this with a dynamically loaded class?
I was thinking I could do something like this, but it doesn't work:
var ClassInstance["NeededFunction"] = function(param1:uint):String { var newString = "Your number is: "+param1.toString(); //New functionality return newString; }
I have a program where I have multiple classes derived from a base class. I want to take all instances of the different subclasses and put them into an array. Is there a way I can search for anything derived from the base class?For example, right now a get the number of children, then see what they are, so:
for (var i = 0; i < this.getNumChildren(); i++) { if (i is "type")
I've loaded an external .swf into a movieclip in my parent .swf using the loadMovie(); function. The file loads perfectly and in the right position, however I can no longer access the functions of the external .swf. When I load the file into a level rather than a movieclip, the functions (buttons and timeline) of the external .swf work properly. Is there any way to use the functions of the external .swf when I load it into an empty movie clip?
I have a base class which is being created via remote_object [RemoteClass alias] from the server.I have other specialized classes that are derived from this baseclass, but serialization with the server always happens with the base class.The base class has meta data that defines what the derived class is, for example
[RemoteClass (alias="com.myco...')] public Class Base {
I'm creating an application with an animated kid figure. All the kid symbols sit in a kidLibrary.Fla file, Each of these symbols have a class named "Kid" linked to it on its Properties >Base Class. This Kid class is responsible for setting the right color and hair type for each kid symbol instance. Every time i need to include one of these kid symbols i drag it to the current .fla file I'm working on. If I place only one kid symbol in the library of the file I'm working on, everything works fine!
Now here is the problem: When i place more than one kid symbol in the library, and then drag it to the stage, then one of the symbols works fine while the other one doesn't seem to access all the properties of the Kid base-class. The result is that only one symbol act perfect while the other one(s) not.