Actionscript 3.0 :: Communication Between Sibling Classes?
Apr 16, 2009
I had a question on OOP and the best practice for how to communicate between classes. If I have a class (SiblingA) where some one clicks something in it and you need to interact with another Class (SiblingB), what is the best method for doing this?
(option1) Should I have a bunch of event listeners in the Document Class that respond to these events? (I thought you wanted a document class to be as small as possible). (option2) Or should I create a separate 'Utility' class that speaks with both siblings to facilitate communication (event handling) between the two (one class with many public static methods). I have attached a diagram to try and help explain this.
Often times these events are dispatched from children of children in sibling classes (ie childOfSiblingA or even its children) Option1 Scenario: A user does something in SiblingA, that dispatches an event to the doc class which listens for it, fires its listener function which calls a (public) method in SiblingB to handle the interaction.
Option2 Scenario: A user does something in SiblingA which calls a (public static) function in Utility class which calls a (public) function in SiblingB to handle the interaction.
I think I am leaning towards option 1 but that would be a lot of dispatching events (child dispatches to parent, dispatches to its parent, dispatches to doc, doc calls child, which calls its child, which... finally does something)
I always have the trouble that make different classes communicate with each other.
1. using get set methods
2. eventdispatch to dispatch custom event.
Today, I am working on this confused issue again. I still can't get through it.this time what I wanna do is this: I wanna use a button (_zoom) to control a mc (_board) located in different class. Let's me give a simple structure for you:
Im building my first OOP project with classes in AS3, Ive done a lot of tutorials and Im grasping the concepts well. Im just having trouble with the concept of communicating between classes. Whats the best way for a class to talk back to its parent once its instantiated? It seems when your inside a class, you're kinda stuck there as far as scope goes? ie one way street. Or am i missing something? Im used to the days where I was coding on the timeline and could just use this._parent etc. But obviously those days are gone.Or should I not need worry about this If I have planned the structure/heirachy correctly?
I need to know how to reference variables in other classes. I have been avoiding this by referencing variables from the Main class, where they are created. But at this point I would like to be able to have the option and it would make me a better programmer.
Say I create a movieclip in the Main.as
Code: public var Enemy_mc:Enemy = new Enemy(); addChild(Enemy_mc);
[Code].....
How do I do that^ without creating a variable in Main.as and having it check Background.as for variable updates?
Can I do something like "Main.Enemy_mc += 5;" like I can do in Main.as to variables that I have created in Main in other classes?
I don't know how to phrase this, but as you can see my code below I have 2 classes. 1. wp_title 2. wp_date
How can I let wp_date to get the height of wp_title's contentText? Currently I tried tracing wp_title.height from wp_date but all I get was 0, I guess it doesn't get the height after wp_title finish loaded. Currently the classes will perform an action after I resize the stage. I assume if I'm able to get the classes to communicate with each other than I could have 1 main classes to control the actions perform in other class?
1. I've created a menu which works almost what I want, but after I click a button and roll over to other buttons, it would show error. It show the error at the output panel but everything still working fine
Code: private function bgGlow(event:Object):void { //Disable menu below event.parent.button.visible=false;
I have a reference to a XML node which is part of a bigger XML tree. Is there a way to get that elements next/previous sibling without accessing the parent and looking for it? Something like DOM's nextSibling would be what I look for. edit: Given that there is no natural way to do this with E4X, I'll just stick to the following (except that in my case, I'll store the actual index somewhere instead):
This is my first time using this forum. What an excellent site. I've learned a lot about using xml with flash through this site. I have expanded upon the example to build an xml menu using flash.The file I have created loads videos dynamically
Loads Sounds Dynamically Includes a title Class to display titles Includes a RollOver class to display on rollover events when you mouse over the titles. ut I would like to build arrows so that you can navigate among each of the individual sub menus using a forward, and back arrow button.I have tried to do this with no success, if anyone can help me, I'm attaching the fla...
I'm trying to get the sibling of an mxml tag similar to the way siblings are selected in javascript. Is this possible in Actionscript? For example, when I click the TextArea with id textarea1, I need it to tell me that the sibling has an id of rect1 so I can do further processing to it.
Below is the code for a simple Flex actionscript project. A sprite is partially covering a hyperlink. What's happening is that when you hover over the sprite, if you're also hovering over the hyperlink, the hyperlink is activated. I want to prevent that. I want the hyperlink to be activated only when the mouse hovers over it -- but not when the mouse hovers over the sprite which covers it.
var child1:ApplicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); var child2:ApplicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); var same:Boolean = (child1.parentDomain === child2.parentDomain); trace(same);
On my stage is a MovieClip called Box and a MovieClip called InfoBox. InfoBox has a fucntion called setInfo. Box, when clicked (It is a MovieClip, not a button), wants to call the setInfo function of InfoBox.
I tried using the following code in Box:
MovieClip(this.parent).InfoBox.setInfo();
This produced the following error:
TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::Stage@34a8ef99 to flash.display.MovieClip. at Box/infoBox()
What is proper way to call a function in a sibling MovieClip?
InfoBox.as looks like this:
package { import flash.display.MovieClip; public class InfoBox extends MovieClip {
I am trying to learn xml in flash myself and am findingit v.hard.All i am trying to do is create a little 'story' with 3 pages.I have content loading into flash but I am unable to get the next 'sibling' into an array e.g. the title. I can only get page1's title in the array but I can never get to page 2.Here is my xml:
<maincontent> <page1> <title>Who is he</title>[code].....
This only traces the first title, how can i get to the second and the third so i can then display them in my text box?
If I have two sibling canvases displayed next to each other, can I have a child Label (or any child component for that matter) in the left canvas overflow outside of that canvas and on top of the next?
Essentially, the simplified problem is this: I have a parent sprite "PARENT" with two children: One child sprite "A" that contains a number of children which respond to mouseover/mouseout and rollover/rollout events, and a second child sprite "B" that is shown/hidden based on the events in "A".
The problem is that "B" appears over "A" on the stage and when the mouse enters "B", the children in "A" throw mouseout/rollout events. Ideally, I would be able to make "B" completely mouse transparent so that the hit testing in AS3 will "see through it" to the underlying "A" sprite, but this doesn't seem possible.
Note that "B" has mouseEnabled and mouseChildren set to false... but the problem seems to be that the AS3 hit testing engine won't look at siblings when determining mouse hit testing. (i.e. It sees "B" under the mouse, sees the mouseEnabled=false setting, and then moves on to "B"'s parent ("PARENT"), but never checks to see if "A" is under the mouse (which it is)).
I can't make "B" a child of "A", because "A" is clipped and "B" needs to extend beyond this clipping area.
At this point I'm thinking I'm going to have to do my own hit testing, which is far from ideal given that "A" contains a large number of children.
I have a Flex repeater that has a complex item template. When a checkbox is clicked, I need to toggle the visibility of a sibling button contained in the same repeater template. Since I can't add binding expressions to event handlers, I can't pass in the repeater item's index.
How can I access sibling components inside a repeater item?
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'm trying to import a class from a class that is located in another folder. How do you move up a directory? Using./ or ../ doesn't seem to work. Essentially I want to access a TweenLite Class but not from the document class. My class is at com/myName and the class I want to access is at com/TweenLite. import ../TweenLite doesn't work... I realize I could just copy and paste the entire Tweenlite folder again, but there's got to be a less duplicative way of doing this..
inheritance and building classes from other classes.
I have 3 classes: gfxRoomText - changeable colour gfxRomInter - changeable colour - interactive gfxRoomImg - interactive - only image / no colour
The first two incorporate the same text field and functions to change colour. The second and third incorporate another class to interactive with. What is the best way of creating these classes using inheritance and how?
I have to use many custom classes for a project, each class includes lots of elements(methods,properties) and I generally forget their names when coding. Is there any editor which I can enumarate the elements of my classes after pressing "." like Flash's built in classes?
I am new to classes and I am just starting to follow tutorials on how to assign classes and sub classes and I am wondering when you assign a base class or class to an object(Symbol e.g movieclip) through the properties, are all instances on the stage no matter how many and what they are named influenced and is the Stage/main timeline always the parent? and just one more question, is the parents objects display list all the movieclips that are used on the stage or all the instances on the stage?
I have a communication problem between to SWF. Here is my code, SwfA is the caller :Shared interface between the 2 Swf :public interface ItfA { // some code} In the second Swf, SwfB, the document class :
public class MainB extends MovieClip { private var a:Itfa; public function start(_a:ItfA) { a = _a; // etc }}
In the first Swf, SwfA:
public A implements ItfA { var mLoader:Loader; [...] public function startLoad() { mLoader = new Loader(); var mRequest:URLRequest = new URLRequest("B.swf"); mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onprogressHandler); mLoader.load(mRequest); } public function
[code]....
When I test in the fash environment (ctrl + enter), there is no problem, but in my browser it failes and says that A is not an ItfA (TypeError: Error #1034)
I am doing an Actionscript 3.0 project which involves introspection. I am wondering if there is a way to get all the classes within a given package structure.