Remove stage listener for multiple movieclips
I would like to completely remove personalized stage listeners, for each movieclip as soon as they are placed where they need to be, but the listeners remain every single time a new clip is dragged.
Thank you for any help!
function clickToDrag(targetClip:MovieClip):Function {
return function(e:MouseEvent):void {
startingPosition[targetClip.name] = new Point(targetClip.x, targetClip.y);
targetClip.startDrag(false, new Rectangle(0,0,800,600));
setChildIndex(targetClip,numChildren - 1);
trace('clickToDrag function invoked\ntargetClip: ' + targetClip.name + '\startingPosition: ' + startingPosition[targetClip.name] + '\n\n');
stage.addEventListener(MouseEvent.MOUSE_UP, releaseToDrop);
}
}
/* releaseToDrop
@1079745 stopDrag for current clip, if dropped off stage, returns to recorded beginning location
@9397041 targetClip:MovieClip
@9397041 startPosition:int
@Returns event:void
*/
function releaseToDrop(targetClip:MovieClip):Function {
return function(e:MouseEvent):void {
targetClip.stopDrag();
trace('releaseToDrop function invoked\ntargetClip: ' + targetClip.name + '\n\n');
stage.removeEventListener(MouseEvent.MOUSE_UP, releaseToDrop);
stage.addEventListener(Event.MOUSE_LEAVE, mouseGone);
function mouseGone () {
TweenLite.to(targetClip, .2, { x: startingPosition[targetClip.name].x });
TweenLite.to(targetClip, .2, { y: startingPosition[targetClip.name].y });
//toggle comments to ease or not ease back to startingPosition
//targetClip.x = startingPosition[targetClip.name].x;
//targetClip.y = startingPosition[targetClip.name].y;
stage.removeEventListener(Event.MOUSE_LEAVE, mouseGone);
trace('releaseToDrop function invoked\ntargetClip dragged out of bounds: ' + targetClip.name + '\n\n');
}
}
}
/* checkTarget
@1079745 checks if current clip is dragged to drag1target(dock), updates boat weight and waterline, remove listeners
@9397041 targetClip:MovieClip
@9397041 lbsAmount:int
@9397041 targetLocation:MovieClip
@Returns event:void
*/
function checkTarget(targetClip:MovieClip,lbsAmount:int,targetLocation:MovieClip):Function {
return function(e:MouseEvent):void {
if (targetClip.hitTestObject(drag1target)) {
targetClip.x = targetClip.x;
targetClip.y = targetClip.y;
drop.play();
TweenLite.to(targetClip, .5, { alpha: 0, onComplete:fadein });
function fadein() { TweenLite.to(targetLocation, .5, { alpha: 1 }); }
noMC.waterlineMC.y = noMC.waterlineMC.y - 3;
lbs -= lbsAmount;
lbsTxt.htmlText = lbs + "<font size='16'>lbs</font>";
targetClip.buttonMode = false;
targetClip.mouseEnabled = false;
targetClip.removeEventListener(MouseEvent.MOUSE_UP, checkTarget);
targetClip.removeEventListener(MouseEvent.MOUSE_DOWN, clickToDrag);
/* TODO: Issue with stage listener for every clip, opportunity to handle programmatically? */
/* check to see if eventListenter is still present */
/*
if(targetClip.hasEventListener(MouseEvent.MOUSE_DOWN)) {
trace(targetClip.name + ' still has MOUSE_DOWN event listener');
}
if(targetClip.hasEventListener(MouseEvent.MOUSE_UP)) {
trace(targetClip.name + ' still has MOUSE_UP event listener');
}
*/
} else if (borderMC.hitTestPoint(targetClip.x, targetClip.y, true)){
/*targetClip.y = startingPosition[targetClip.name].y;
targetClip.x = startingPosition[targetClip.name].x; */
TweenLite.to(targetClip, .2, { x: startingPosition[targetClip.name].x });
TweenLite.to(targetClip, .2, { y: startingPosition[targetClip.name].y });
} else {
/*targetClip.y = startingPosition[targetClip.name].y;
targetClip.x = startingPosition[targetClip.name].x; */
TweenLite.to(targetClip, .2, { x: startingPosition[targetClip.name].x });
TweenLite.to(targetClip, .2, { y: startingPosition[targetClip.name].y });
}
}
}
