Hi,
I have created particle effect adding onMouseMove random MC’s to stage.
There are two buttons on stage. On MOUSE_OVER I want to remove event listeners for particle effect and on MOUSE_OUT i am adding back event listeners. It kind of works, but only with delay, please follow link provided to see it (http://testing.fjofjo.net/). You are still able to hover above buttons and eventlisteners are not removed, only when you stop on a button and last MC has been removed from display list - only then hand cursor appears and event listeners are removed. Why it doesn’t happen immediately , as soon as I’m over my buttons? How to remove eventListeners instantly?
here is my code:
import gs.*;
import gs.easing.*;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(Event.RESIZE, resizeHandler);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onLoop);
var sW:Number = stage.stageWidth;
var sH:Number = stage.stageHeight;
var back:Sprite = new Back(); // BACKGROUNG IMAGE
addChild(back);
var btn1:MovieClip = new Btn1(); // BUTTON 1
addChild(btn1);
var btn2:MovieClip = new Btn2(); // BUTTON 2
addChild(btn2);
btn1.y = btn2.y = sH + btn1.height*3; // SETTING Y VALUES FOR BUTTONS OUTSIDE THE STAGE FOR TWEENING
var btn1_y:Number = sH - btn1.height*3; // POSITION OF BUTTONS
var btn2_y:Number = sH - btn1.height*3; // AFTER TWEENING TO STAGE
TweenLite.to(btn1, 0.7,{y:btn1_y, ease:Bounce.easeOut}); // TWEENING BUTTONS
TweenLite.to(btn2, 0.7,{y:btn2_y, ease:Bounce.easeOut}); // TO STAGE
btn1.buttonMode = btn2.buttonMode = true;
btn1.addEventListener(MouseEvent.MOUSE_OVER, btnOver); // ADDING
btn2.addEventListener(MouseEvent.MOUSE_OVER, btnOver);
btn1.addEventListener(MouseEvent.MOUSE_OUT, bntOut); // LISTENERS
btn2.addEventListener(MouseEvent.MOUSE_OUT, bntOut);
btn1.addEventListener(MouseEvent.MOUSE_UP, btn1Up); // TO BUTTONS
btn2.addEventListener(MouseEvent.MOUSE_UP, btn2Up);
function btnOver(e:MouseEvent):void { // THIS IS THE PROBLEM
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onLoop);
// IT WORKS BUT WITH DELAY
} // IT DOESN'T REMOVE EVENT LISTENERS INSTANTLY
function bntOut(e:MouseEvent):void { // BUT ONLY WHEN onLoop FUNCTION IS DONE
stage.addEventListener(MouseEvent.MOUSE_MOVE, onLoop); // ONLY WHEN LAST MOVIE CLIP HAS BEEN REMOVED FROM
} // DISPLAY LIST
function btn1Up(e:MouseEvent):void {
trace("Button 1 was pressed"); // ALSO YOU CAN'T CLICK THE BUTTON
} // UNTIL ONLOOP FUNCTION IS DONE
function btn2Up(e:MouseEvent):void {
trace("Button 2 was pressed");
}
resizeHandler(null); // INITIALIZE
function resizeHandler(event:Event):void {
var sW:Number = stage.stageWidth;
var sH:Number = stage.stageHeight;
btn1.x = (sW/2) - btn1.width; // SETTING BUTTON X AND Y
btn1.y = btn2.y = sH - btn1.height*3; // VALUES WHEN RESIZING
btn2.x = (sW/2) + btn2.width; // THE STAGE
back.width = sW; // X AND Y VALUES
back.height = sH; // FOR BACKGROUND IMAGE
back.x = back.y = 0; // ON RESIZING
}
var myFont:Font = new Diavlo();
function onLoop(e:MouseEvent):void {
var sp:Sprite = new Sprite(); // HOLDER FOR ARRAY
sp.x = mouseX;
sp.y = mouseY;
addChild(sp);
var myArray:Array = ["A","a","Ā","B","b","c","d","e","f","g","C","Č","D","E","Ē","F",
"G","Ģ","H","I","ī","J","K","Ķ","L","ļ","M","N","O","P","Q","R",
"S","T","U","ū","V","W","X","Y","Z","Ī","Ž","Ä","Ö","Ü","ñ","õ",
"ç","Ę","į","ų","æ","ð","å","Æ","Ø"];
var rn:Number = uint(Math.floor(Math.random()*myArray.length));
var txtFmt:TextFormat = new TextFormat();
txtFmt.font = myFont.fontName;
txtFmt.size = 18;
var txt:TextField = new TextField();
txt.defaultTextFormat = txtFmt;
txt.embedFonts = true;
txt.text = myArray[rn];
txt.selectable = false;
sp.addChild(txt);
var sw:Number = stage.stageWidth;
var sh:Number = stage.stageHeight;
var randX:Number = Math.random()*sw;
var randY:Number = Math.random()*sh;
var scaleRand:Number = Math.floor(Math.random()*7);
sp.scaleX = sp.scaleY = scaleRand;
TweenLite.to(sp, 2,{x:randX });
TweenLite.to(sp, 2,{scaleX:.7, scaleY:.7,y:randY, overwrite:false,onComplete:remover});
TweenLite.to(sp, 0.5,{overwrite:false, alpha:0, delay:0.7});
function remover():void {
removeChild(sp);
sp = null;
}
}
I have added my FLA too.
Thank you!
P.S I use tweenLite engine.