ActionScript 3.0 :: Passing Parameters In Functions And Event Listeners?
Jun 21, 2009I'd like to know what's the different using global functions and functions with param..Why using params? When the as3 developer uses it?
View 3 RepliesI'd like to know what's the different using global functions and functions with param..Why using params? When the as3 developer uses it?
View 3 RepliesI have a 16x16 grid of buttons, and want to add an event listener to each of them so when clicked it will return its unique grid position number (anything between 0-255);
What I have so far:
public static const GRID_SIZE:Number = 16;
private var i:int;
private var j:int;
// Constructor
public function Grid()
[Code] .....
Unfortunately every time the listener function is called by each button, it uses the last two values of i and j, which in this case return 255 for every button.
I like reusing functions repeatedly so I pass the object to the function (blur, drop shadow, etc.) but if an Event or MousEvent function is involved, I have to do things I don't like. In my example, I had to put the TimerEvent.TIMER_COMPLETE function as a sub function of the setTimer function. I would rather keep the functions apart but I don't know how to pass a parameter to the event function to tell it what movieclip(timerObject) to fade in. Is there a better way to do this?
View 2 RepliesI have 2 functions. Each one is being called by a different event listener. Both event listeners work because I am able to trace strings in both of them.. my problem is that i am trying to create a variable that is local to both functions. The first function "working" adds a number to the variable and when the second event listener triggers function "notworking" which retrieves this same variable called "counting" both functions are called automatically by event listeners.. how do I do this? i am stomped!
[Code]....
hboxvar.addEventListener("mouseDown",dosomething(3 43));
hboxvar.addEventListener("mouseDown",dosomething(1 23));
hboxvar.addEventListener("mouseDown",dosomething(1 2342));
public function dosomething( somenumber:Number ):void {
//do something here
}
I try to do above function but I need to pass variable from hboxvar but not from inside function suggested by macromedia.
any one frustated with this way of passing multiple parameter which depends on what to pass in flex 2 using addEventListener ?
[URL]
Passing additional parameters to function listeners You can pass additional parameters to function listeners depending on how you add the listeners. If you add a listener with the addEventListener() method, you cannot pass any additional parameters to the listener function, and that listener function can only declare a single argument, the Event object (or one of its subclasses).
Suppose I want to create a bunch of buttons using a loop. But I want each button to do something different. Suppose the buttons are numbered and I simply want each button to print out its unique number when clicked. Heres what I have so far:
Code:
var t:CTextField;
for (var i:int = 1; i <= 100; i++) {
t = new TextField();
[code]...
Ive tried many different things to get this to work, but none of them worked so I wont bother posting them all. At best, I got it so every single button traced "button 100 was clicked". I sort of understand why that happened, but I dont know how to make it work properly. Once again, all I could find was people saying "use custom events", but I think I need a lot more details than that. For example, I dont see how changing
Code:
t.addEventListener(MouseEvent.MOUSE_DOWN, buttonClicked);
to
Code:
t.addEventListener(MySpecialMouseEvent.MOUSE_DOWN, buttonClicked);
Is it possible to pass parameters through for instance a MouseEvent.CLICK, or Event.ENTER_FRAME, if so then how?
View 3 RepliesI have made an event listener:text0_mc.addEventListener(MouseEvent.CLICK, showMe);showMe is a function, but I need it to call more than 1 function at once i.e. -ext0_mc.addEventListener(MouseEvent.CLICK, showMe1, showMe2, showMe3, showMe4, showMe5, showMe6, showMe7);Each function contains an if statment as below.
function showMe1(event:MouseEvent):void
{
if (shuffledArray[1]==orderArray[1]){
[code].....
What I am trying to do is, if a user presses keyboard (key 1), picture 1 should FadeIn and if a user presses keyboard (key 2) picture one should FadeOut and picture 2 FadeIn and vice-versa. With the code mentioned below it works fine sometimes if I am not pressing any other key while it is performing one action but sometimes it behaves weird also. What I want AS3 to do is not to take any action or in other words it should not listen to keyboard until it finishes the opening or closing animation of a picture or any other object assigned to the key.
stage.addEventListener (KeyboardEvent.KEY_DOWN, KeyDownHandler);
/**///keyboard keycode for 1 & 2var key1:uint = 49;
var key2:uint = 50;
var BG1:Image1 = new Image1();
var BG2:Image2 = new Image2();
[Code] .....
I've had this glitch for a long time, and I've tried several ways to get rid of it, and now that I just recoded everything to see if it was something I did, it's back again! basically, whenever I press space (regardless of whether or not I am listening for a space press [or any key press]), the last function fired by an event listener will run itself again, with the exact same arguments supplied to it in the first time.
For example, if I make a simple button to trace("text"); and take you to another frame. Once you get to that frame you can press Space and it'll trace "text" again! I really have no idea what's causing this, and it doesn't seem to be happening to me in new files. and there's too much code to show you, but I just want to know if anyone has heard of this before or if they have any theories to what's going on.
I am fairly new to AS3.
vancouverMC.dotsBttn.addEventListener(MouseEvent.M OUSE_OVER, mcIn(vancouverMC));
vancouverMC.dotsBttn.addEventListener(MouseEvent.M OUSE_OUT, mcOut(vancouverMC));
function mcIn(mcName:MovieClip):void{
mcName.gotoAndPlay("in");
mcName.ringMC.gotoAndPlay("on");
} function mcOut(mcName:MovieClip):void{
mcName.gotoAndPlay("out");
mcName.ringMC.gotoAndPlay("off");
}
Why this is Not Working?
I'm currently working on a nav bar but I've run into a questionable situation. There are several links in the menu, and for each i'd like a mouse event on over and on out. Do I have to specify both of these events for each link, or is there an easier way to do it that I don't know about? Can you apply event listeners to multiple objects/functions?
View 6 RepliesI'm stuck with an issue and I cannot understand why it behaves like that. In a for loop, I'm passing the for index as an event parameter. However, the eventHandler is getting the wrong index, but the right target...
[Code]...
I've managed to create a button which on MOUSE_DOWN scales its parent object- it works just like windows in your OS, where you grab the corner and can change the scale of the window.
Here's how I've done it, (minus the MOUSE_DOWN listener)
Code:
function scaleDragHandler(event:Event):void {
var mcWidth:Number = event.target.parent.width;
var mcHeight:Number = event.target.parent.height;
[Code].....
However, it throws the error, "Access to undefined property 'scaleMC'" on the removeEventListener line. My thought was to put another listener for mouse up inside the first, but that sounds wrong
fileReference.addEventListener(Event.COMPLETE, uploadCompleteHandler);
private function uploadCompleteHandler(event:Event):void {}
Above is one way to add an event listener in Actionscript. By default the callback function needs to have an argument with name event and type Event. Is there a way to declare this function without any arguments :
private function uploadCompleteHandler():void {}
Edit : It's possible to add an event handler without any arguments in mxml. So one student wanted to know, why isn't it possible to do the same in actionscript?
I would like to pass Parameters to a functions from a button click. Currently I need to call a function that in turn passes the Parameters.
example
gardengate_btn.addEventListener(MouseEvent.CLICK, onClick_gardengate);
function onClick_gardengate(e:MouseEvent):void{
/*Sends the xml and the paintingCount_Numb to the parseXML function.
This will display the text and images for each painting
*/
ParseXML(xmlData,0);
}
I would think that i could just do this but it gives me an error. gardengate_btn.addEventListener(MouseEvent.CLICK, ParseXML(xmlData,0)); 1067: Implicit coercion of a value of type void to an unrelated type Function.
Look at the simple code below:
Code:
stage.addEventListener(MouseEvent.CLICK,traceMe);
function traceMe(evt:MouseEvent)
{
trace ("hello world!");
}
What if I want to pass a parameter to the traceMe function? There is a way to do that?
This is my first real programming endeavor and this is the last thing holding my little project back from being a success.
My goal with this code is to add event listeners to an array of Movie Clips that will drag and drop them on the stage.
Here is the code:
var itemBank:Array = new Array(d1_anim.drawer1.test01.movieClip_1, d1_anim.drawer1.test01.movieClip_2);
for(var i:int = 0; i < itemBank.length; i++) {
[Code].....
I added this code to make a movie clip (gFP) popup when rolled over and shrink back when rolled off:
gFP.addEventListener (MouseEvent.MOUSE_OVER, goToGFPOver);
private function goToGFPOver(e:MouseEvent):void
{
gFP.scaleX = 1.4;
[code].....
It works, but I have 45 movie clips I want to add this to - way too much code. Is there a way to have the event listeners for all the movie clips go to the same "Over" and "Out" functions?
I have already created a custom mouse event which seems to work fine. It is simply a mouse event which passes an additional sound object. The problem is I am passing this event to another class which checks for collision of a movie clip with another and if true it adds the sound to an array. What I think is happening is a type conversion problem between my customEvent and the MouseEvent. [code]...
View 3 RepliesLet's I have a class Square that has a several functions. I want to call it from a class Grid, which is a group of Squares.So in the class file for Grid, how would I do this:
Code:
public function doSquareFunction(thisFunction:Function):void{
square1.thisFunction();
[code]......
Would it be possible for something like this to happen?
Code:
addEventListener(KeyboardEvent.KEY_DOWN, loop);
addEventListener(Event.ENTER_FRAME, loop);
function loop(e:Event, key:KeyboardEvent) {
//do something
}
I get the error
ArgumentError: Error #1063: Argument count mismatch on Turret/loop(). Expected 2, got 1.
I have this in my constructor:
[Code]..
The problem is I get Error: Error #2094: Event dispatch recursion overflow. Why does removechild keep getting called if this.parent does not exist? Why doesn't removing event listeners work?
Can event listeners only be added to the class which dispatched the event? I ask because I want to have the logic for the listener on the main class, and the action is dispatched on click from a thumb which is instantiated in a scroller class. Kinda like this:
ActionScript Code:
pseudo code:
class main {
main() {
[code]....
This doesn't work. Why can't the main class listen for an event on the thumb class?
I am adding a different listener to each button in the menu and there are several menus as well, then each one of those functions adds a different child depending on the button and also pushes several values to the Array list, in this example called objectsOnStage. I will be running this structure function 40 times with each of the highlighted elements changing accordingly.
//Listener and function for Button01
menu01.button01( MouseEvent.MOUSE_DOWN, button01Function);
function button01Function(event:MouseEvent):void
{
[code]....
My original thought was to keep all those changing values in an Array list and run a loop for the function/listener, but I just cant make it go.
Is it not possible to call other functions from generic mouse event functions?
Code:
_root.myButton.onPress = function(){
hide();
[code]......
i'm trying to pass variables to another SWF using a Loader/URLVariables combo.
I need to know if this way of passing variables should even work. And if not can some recommend a better way.
var uv:URLVariables = new URLVariables();
uv.lang="en";
uv.gameId="123";
uv.profileId="456";
[Code]...
I need to dynamically pass 2 parameter to an swf movie to make it work properly, they are a number and a boolean. To do this I've changed the html page which contains the movie to php, I pass to the page the parameters' values through GET. The values are correctly passed to the page, I've tried to print them.
I build the call to the swf in this way collpreloader.swf?connid=<?php echo $_GET['connid'] ?>&animazione=<?php echo $_GET['animazione'] ?>
collpreloader.swf correctly reads the connid parameter, but animazione results always true.
[Code]...
I've somewhat decided n Anvsoft flv player for a flash website project. There seem to be many of these players free and otherwise, but they seem to all publish for HTML, not from anothe SWF.. The published html is below, and my question is how to call the SWF from Actionscript 2 rather than HTML? I believe I can figure out the rest of the mechanics to a recent education .
[Code]...
So I have an MC that has 6 labels and 6 buttons all with different names. When you click on a button, it needs to direct you to it's appropriate frame label in the MC. Now, since AS 3.0 has done away with inline functions, how the heck do I code it so I don't have a function with a bunch of if statements inside of it in addition to all of my eventListeners that I have to add to each of my buttons? In AS 2.0, I would have done it like so:
Code:
function movePlayhead(whichOne:String):Void{
this.gotoAndStop(whichOne);
} button1_mc.onRelease = function():Void{
movePlayhead("label1");
};
button2_mc.onRelease = function():Void{
movePlayhead("label2");
};
Etc...
With AS 3.0, you have to add eventListeners to each of your buttons where each eventListener calls a function, but how can I write it so I don't have to write a bunch of if statements inside the function the eventListeners are calling in order to test for which button is being clicked? Like so:
Code:
button1_mc.addEventListener(MouseEvent.CLICK, movePlayHead);
button2_mc.addEventListener(MouseEvent.CLICK, movePlayHead);
button3_mc.addEventListener(MouseEvent.CLICK, movePlayHead);
function movePlayHead(event:MouseEvent):void {
[Code] .....