ActionScript 2.0 :: Make Class Instances Into Listeners And Broadcasters From Inside Each Class?
Jul 8, 2007
I want to know how to make class instances into listeners and broadcasters, from inside each class. Here is what I am trying specifically... part of the Proj class... (projectiles, as a matter of fact)
Code:
private function listen():Void {
u.register(this);
onUpdate = function(){
step(); // a function I have which makes the projectile move (not shown)
}
}
where "u" is another class, the Updater class with this code...
Code:
class Updater {
// const. --- make this a broadcaster
public function Updater(){
[code]....
PS: What is the syntax for using AS2 code tags instead of just "[CODE|"?
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).
I've been hitting dead ends while programming lately all over, and I finally came to the realization all the code I have that is broken is because I don't know how to interact with instances of one class from within another. Here's the gist of what I am trying to do:
The problem is, if I address a single instance that is on the canvas, I get "access to undefined property targetClip", even though the document class can interact with it fine. If I target the class file of targetClip, I get "Implicit coercion of a value of type Class to an unrelated type flash.display:DisplayObject". It isn't just a problem with hitTest either, I'm having this problem with other actions, so there is some basic syntax I'm failing to comprehend.
is it possible to create a class within the main timeline? is there a way to get around it?what am trying to do is to bring my class inside my main fla file, rather than importing it.
Today i tried to attach a movieclip using AS3, but i wanted to make the positioning inside the class.
And i obtained an error: First file(Document class)
PHP Code:
package { import test; import flash.display.*;
[Code].....
At sequence mc.q=Math.random()*100; in the trace from test.as it displays 'NaN'. How can I modify the value of 'q' (public variable) via instance? If i use a function like mc.setCoords(x,y) the script works fine.
package{ public class Character{ protected var _hp:uint = 50; //Character Health Points protected var _power:uint = 5; //Damage dealt
[Code].....
I`m instancing a Character and a Player in the Main Timeline, all in frame 1. When I use: ""player.attack(character)"" it works fine by itself.
So I added the if (defender._hp <= 0) this.win() which gives me the following error:
1061: Call to a possibly undefined method win through a reference with static type Character.
"defender" is a Character instance, "this" is a Player instance and "win()" is a Player method. I try to call the Player method inside a Character method using the Player instance adding the "." and his method name
Do I really need to define the win() function in the Character class? Is there a bypass to use a subclass method in a parent class method if it`s called from an instance of the subclass?
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?
i have a BasicMap.as that takes an Array and populates itself with the MC objects passed to it by a String reference.it inherits from Sprite, and so it just places the objects on its self.then i have a class that inherits from that class, and gives a little more functionality to it, but in order for it to do that, it needs to place the objects not on itself, but instead inside a holder Sprite, so here is my problem:
I was wondering why my current code for calling a setInterval on a function doesn't work inside my class.I have this code inside one function, calling a second function.
The selfReferential keyword refers to the current class,but was defined previously (selfReferential = this; ).I get no errors, but the dupe() function is never called.and I had the selfReferential variable replaced with the this keyword at one point as well.
I have 1 class that extends movieclip, let's call it Class0. I have 1 class that extends movieclip, let's call it Class1.
I create an instance of Class0 on stage like : var myClip0:Class0 = new Class0(this, "Class1");
The class Class0 when initializing, will create a new movieclip (myClip1) and add it as child, as an instance of Class1, like myClip0.myClip1. But it's when i create that clip, i want to tell it, it's an instance of Class1, like :
private var myClip1:Class1 = new Class1(this);
Where Class1 could be any class.
How do i pass Class1 to Class0 so it can create it dynamically?? Do i have to use the apply function??
I'm trying to build a listeners clean up class. I can do it for any item that isn't associated with an object or movie clip. However, how can I modify this to make it work for those items?
I have built a basic preloader that runs in my document class. I'm having trouble with it.I'm guessing its due to what a class can and can not access from the stage?theres 2 problems. the first is that I cant change the keyframe the stage is on from the class. the second is im getting an error 1009 if I comment that out.
I have many buttons in Main.mxml. I'm trying to move the button functionality into a Class and have Event Listeners inside the class respond to Click and call other functions. I have written:
I have a mc that i use as a button. I have an external class that controls the button and adds interactivity to it, here's part of the code:
[Code]...
The problem is, i want the btn that, when clicked, remain inactive.That's why I remove all the listeners in the class. HOWEVER, it still functions as a button, I mean the functions haven't been removed at all after I click it. What's wrong here? Why are the functions still there, if I have removed them when clicked at the btn?
I'm having a problem where I can't make an instance of a class in one class like I can in other classes all in the same package. When I call the update function from another class it doesn't work. I traced the xPos of the instance of the class I was talking about and I get zero, but that is incorrect so I'm thinking it's the above problem. If anyone knows what the problem is please tell. Here's my code:
I'm creating a class for a game, and I'm having a problem removing event listeners from movieclips in that class.In the class file I have an enterFrame event which puts the movieclips into motion - I want to remove that event listener when the movieclip is removed from the stage.I made the function 'public' in the class file and tried to target it as follows (animal is the movieclip)animal.removeEventListener(Event.ENTER_FRAME, animal.onEnterFrameHandler)
i am making a simple game i want to be able to add an keyboard event lisnter within the class constructor. However i am having trouble. i undertsand you have to pass the stage through a listed display object property stage? anyway i am getting errors that do not recognise my event listener keyboard event.
how do I use mouse event listeners outside of my document class. I have the following simplified document class:
public class Main extends Sprite { public var realMain:State1 = new State1();
[Code].....
However, this doesn't work in its current state; "State1" isn't outputted. I have seen references to the use of the Event.ADDED_TO_STAGE event, but am not sure if that is what I need to do, or how to use it.
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:
Is it possible to create 2 instances of 1 class (for example: "Header"). Add these 2 instances to the stage on different positions. This Header class contains some buttons and what I want, is: when I rollOver one of these buttons, both buttons in the 2 Header instances are "rollingOver".
I have a piece of code, that moves an array depending on it's type. If the array is of TypeA objects, it will change TypeA. If it is TypeB it will change TypeB. The issue with the current code is the repeative blocks.
[Code]...
Which stops working whenever I need to access any property (user) selectedInstance.testSomething();