ActionScript 2.0 :: Avoiding Nested Functions In A Class?
Nov 9, 2004
I have run into this problem twice now, for two different reasons. Technically the more recent time it isn't a roadblock, but rather I just want to avoid memory waste by not using nested functions for my event handlers.[URL]
The reason I've come to this forum is that I always went on my merry way, defining event handler functions on movieclips within functions, until today, I read "I really didn't like the idea of defining an event handling function within a method of a class. I don't think nested functions are a really good practice." in the archives of the BIT-101 blog. So I decided to try to extract these and assign only a reference to each movieclip that needs the function. The problem is, it's in a class - and I need access to the properties of the movieclip from within the function. I figured I might be able to extend MovieClip, but I don't want anything in the library, so I run into the problem of how I would use my new movieclip-extending class - I read something about using the Linkage name of "__Packages."+[classname] - is that really proper? Either way, my final question is - if it's not good practice to use nested functions within the class, where do I create my event handler functions?
I have a series of calculations i'm doing over a bunch of objects stored in a array. Each function is pretty CPU demanding but if you only run one function, it just works fine.
I'm working with AS2 and running into a problem when loading a bunch of SWFs that share classes. I have a main SWF that loads several child swfs. The main and the children often share some core classes. The issue is that these SWFs were not all created at the same time, and some of the core classes have changed between SWF compilations. It appears that the first instance of any class to load gets used for all following references to that class - regardless of which version of that class was used in compiling the following SWFs.In AS3, the ApplicationDomain can be set to circumvent this issue, is there any that can be done in AS2 to avoid this collision/overwriting?
I initially posted this in the AS3 NEWBY forum but I think it probably belongs here. On stage I have 5 boxes, the letter A and two buttons labelled button1 and button2. The letter A is also defined as a button labelled AA_btn. When I click on button1 I want a condition to be set so that if the letter A is clicked, boxes 2 and 4 will disappear. Conversly if I click on button2 I want boxes 1, 3 and 5 to disappear. To do this I have nested the letter A and B functions under the button1 and button2 functions.
I also have a reset button which resets the display of all five boxes back to their original display.Everything works fine when I press Button1 to set the first scenario. When I then click on the letter A boxes 2 and 4 disappear. (perfect). Everything also seems to work when I press the reset button, ie: all five boxes reappear.
I've got a few MouseEvent listeners outside of a function that contains nested functions that need to use the functions attached to the listeners.
button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); function navigation (): void { if statements;
[code]....
I keep getting an "1120:Access of undefined property buttonOver" error. I know it's because the EventListener is outside of the function "navigation" but I need it to be accessed by other functions later.
I have a few rows of movie clips making a menu. Because I will be adding to the number of MC's I use a variable called "menuitems" and run a FOR loops to assign all of these MC's onrollOver, onrollOut and onRelease functions. I'm doing this to save having to assign these functions to them individualy (as they are the same functions). Its works fine, but when the MC is released it is told to jump to frame 2, where there will be nested mc's that need to be able to clicked and rolled over. Because the parent movie has event functions assigned to it they seem to overide them. Is there a way around this? I tried placing a transparent MC on the 1st frame of the movie and trying to assign the onRelease function to the "hotspot" but it doesnt work. Here is my code:
Code: function buildthumbs () { for (i=1; i<= menuitems; i++) {[code]...........
I have this menu_mc appearing on stage on RollOver.Inside this menu_mc are 5 other mcs that are also supposed to react on rollOver.But : the rollOver works only on the menu_mc, the rollOver on the nested mcs no. I put all the script on the main stage, accessing my nested mcs with the "insert target path".I tried also to put the script of the nested mcs inside the menu_mc movie clip, but it does not respond.What do I do wrong ?
I'm starting to get a handle on some AS3 basics in terms of building nested classes or packages or whatever the proper syntax terminology is.
Now I have two instance functions:
1 - parseXML
2 - loadImage
I have these 2 functions working together using an eventHandler. Once the XML is parsed the aim is to load an image. Sounds pretty common right?
When the image loading commands are in the parseXML function they work fine. But then when I put the image loading commands in separate function titled loadImage and trigger it using an eventHandler onComplete, it loses my variable and instance definitions.
i have a nested swf that functions just fine.i have a parent swf (that holds the nested swf) that has a button (not related to functions of nested swf) that no longer works when combined.the button is simply a link button to a url... is there a very simple solution to this?
And I have a mc on the stage that have a code inside to attach a scroll from the library. This scroll load a mc called "Rotuladores1", and inside this mc I have my button "r1".[code]...
For some reason I can't get this nested set of functions to work, it executes the first tween and the tween invoked after motion of the first is finished but it doesn't ever get to the third!
ActionScript Code: var t1:Tween=new Tween(p1,"rotationY",Strong.easeOut,90,0,50,false); var t1x:Tween=new Tween(p1,"x",Strong.easeOut,-900,0,50,false); t1.addEventListener(TweenEvent.MOTION_FINISH,onMotionFinished);
Code: function backhome(event:MouseEvent):void { this.gotoAndPlay("mapbegin"); }
At frame 10, I have a movie clip that animates and stops. Inside of that movie clip is a button that I want to go back to frame 2 when someone clicks on it. I want to be able to click on that button and call the function above.
I'm having problems with the scope of nested functions. I have a movie clip: "MC_clip" inside that movie clip there is a button: "inside_button". when users press "inside_button", I want the movie will jump to play frame 5 (main time line). how do i refer the stage from inside a movie clip?? another question is about the other way: how can I call to a function that is declared inside a movie clip?? is that movie clip have to be an instance on the stage??
At frame 10, I have a movie clip that animates and stops. Inside of that movie clip is a button that I want to go back to frame 2 when someone clicks on it. I want to be able to click on that button and call the function above.
How would you go about accessing a function or variable from a parent clip if the clip accessing has been loaded using the Loader() constructor in AS3?
I'm wondering if anyone has experience with if there is a big difference in performance in ActionScript 3 between keeping a class with only public static functions, and utilizing those functions often (as in a frame event at 30fps), and in turning the class into a "normal" class of which I instead make an instance and call the functions via the instance instead.
I realize this is kind of an odd issue, but I am wondering if there's any way to get Flash to allow me to access a class's static functions using a class variable that points to the class. Example:I create a class called FooClass that has a static function named fooI then create a variable of type Class that points to it
Code: var class:Class = Class(getDefinitionByName("FooClass")); However, when I try to call foo() using the variable, it errors saying the function
Main is my doccument class . how can i call Main.Caller
package { import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { public function Main():void { if (stage) init(); else
I use the loader class to load in an external swf, a preloader movie in my class. (not a document class)
To target the properties in the swf (specifically the text field in it), I coerce it to a movie clip after it's loaded and add the child with:
var thumbPreloaderMC:MovieClip=evt.target.content as MovieClip;
now I can use: thumbPreloaderMC.preload_text.text "sometext";
to reach the text field. works.
But, I want to nest that clip in a container movieclip I'm placing all the thumbnails I'm loading in, thumbContainer.
So I create the movieclip thumbContainer, add the child, then add the preloader swf to this clip.
I can't name the loaded swf, it throws an error, I googled that and see I can't name an already named clip.
I get an error "TypeError: Error #1010: A term is undefined and has no properties."
First of all, I'm fairly green with as3 still, I think perhaps I should rethink how I'm structuring this. I could and would ask how to target a nested loaded swf from a class.
is nesting clips like this from a class bad practice? What are best practices when it comes to using timeline based animations like preloaders etc by a class? I'd like to make my class as reusable as possible, but one can't create all animations and graphics from code.
Ok im rather new to flash so ill do best i can to describe this. I have a HealthBar movie clip with 3 layers, bottom layer is just a red rectangle, middle layer is a green rectangle that is a movie clip, and the top layer is just a border. the green rectangle movie clip has an instance name of bar. i put my HealthBar on my stage with an instance name of healthBar and i change it when the players health goes down by calling _root.healthBar.bar._xscale = health where health is 0-100.
this works all fine and dandy. now i have a movie clip of MiniBoss with an instance name of miniBoss# where # is a number of the layer depth when it is created. in the MiniBoss movie clip i have an instance of the HealthBar with an instance name of bossHealthBar. i tried to call from within the MiniBoss class bossHealthBar.bar._xscale = health but i get an error that there is no property of bossHealthBar.bar._xscale. how do i access the bar in the HealthBar in the MiniBoss clip from the MiniBoss class in its onEnterFrame() method?
i have a red rectangle. On top of this rectangle is a bitmapped (not vector unfortunately) pattern fill that needs to include some white/transparent pixels that should show the red color of the rectangle. How do you define this in SVG, if possible while avoiding the use of masks? The 'transparent' pixels keep coming up white instead of red.
Basically i want an object to avoid/dodge the mouse. But i want the mc to have a fixed x and y to move back to once the mouse is away. I also don't want it to jump, i want it smooth like a follow mouse effect.
(Actionscript 2 btw - and actually cs4, not that it really makes any difference?) I have a class that instantiates a movieclip from the library, e.g.: Code: debugbar:MovieClip = thing.AttachMovie("debugbar", "debugbar_mc", 999); So attaching it to the where ever "thing" is - could be movie clip or level0 or whatever, doesn't matter as "debugbar" is a private variable of the class. Now the important part - debugbar in the library is a movieclip that contains some components - buttons and textInputs. The problem comes when trying to access these components.
I would have thought that this would work: Code: debugbar.input_txt.text = "hello"; In order to set the text of "input_txt", the instance name of a TextInput component on the timeline of the movie clip (put there in author time). However, this does not work. Infact, I cannot access any specific "component" properties - they come back undefined. I can however set and retrieve MovieClip properties for the "input_txt", such as _x. However there is one added strange thing with this too - setting _visible to false doesn't seem to work (however perhaps a component by default overrides this).
I also appear not to be able to add event handlers to the component - at least for the usual component events. I tried casting it to a component, such as: Code: var temp:TextInput = TextInput(debugbar.input_txt); trace(temp); which gave "temp" as null. However if you trace the thing itself without casting to what it is, it gives the path to correctly. It almost seems like the components are somehow broken when trying to access them this way - or that they cannot be accessed this way?
The thing is, I was able to access all of this before, when the code to do it was placed on the timeline (frame 1, the only frame) of the debugbar itself, where the components were child instances. This meant I could just reference them directly too - so input_txt rather than debugbar.input_txt , although that is probably largely irrelevant. I need to have it in a class though, as I need to pass in certain objects that need to be accessed by the mc.
I have a class controlling all my targets, I want to play a death scene for each target when they get shot. My targets involve several nested movie clips, I want to put the death scene on the second level of my targets nested clipsWhat code do I use to tell flash to go to the second level in my targets and play there?Here is my class code in it's entirety. I have highlighted the part thats currently playing my targets.
package {import flash.display.MovieClip;import flash.events.Event;import flash.events.MouseEvent;import flash.media.Sound; public class SquaresClass extends MovieClip {function SquaresClass()