如何从动作脚本EventListener
中删除MovieClip
?以下是我的示例代码。
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
var color: ColorTransform = new ColorTransform();
color.color = 0x00CC66;
colorChange_mc.buttonMode = true;
colorChange_mc.addEventListener(MouseEvent.MOUSE_OVER, changeColor(color));
colorChange_mc.addEventListener(MouseEvent.MOUSE_OUT, changeColorToNormal);
function changeColor(color: ColorTransform): Function {
return function (e: MouseEvent): void {
colorChange_mc.transform.colorTransform = color;
}
}
function changeColorToNormal(e: MouseEvent): void {
var color: ColorTransform = new ColorTransform();
color.color = 0x000033;
colorChange_mc.transform.colorTransform = color;
}
changer_mc.buttonMode = true;
changer_mc.addEventListener(MouseEvent.MOUSE_DOWN, removeEvent);
function removeEvent(e: MouseEvent): void {
colorChange_mc.removeEventListener(MouseEvent.MOUSE_OVER, changeColor(color));
}
我在MovieClip
上创建了两个stage
,colorChange_mc有两个EventListener
一个用于mouseDown
,一个用于mouseOut
。按下change_mc按钮时,我想删除其中一个EventListener
。我能够删除EventListener
而不将参数传递给changeColor函数。但在我的真课中,这个参数起着至关重要的作用。
答案 0 :(得分:1)
使用class-var - 您已经在代码中使用了一个。为了保持原状,我创建了第二个ColorTransform
作为类-var - normalColor
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
var color: ColorTransform = new ColorTransform();
color.color = 0x00CC66;
var normalColor: ColorTransform = new ColorTransform();
normalColor.color = 0x000033;
colorChange_mc.buttonMode = true;
colorChange_mc.addEventListener(MouseEvent.MOUSE_OVER, changeColor);
colorChange_mc.addEventListener(MouseEvent.MOUSE_OUT, changeColorToNormal);
function changeColor(e:MouseEvent): void{
colorChange_mc.transform.colorTransform = color;
}
function changeColorToNormal(e:MouseEvent): void {
colorChange_mc.transform.colorTransform = normalColor;
}
changer_mc.buttonMode = true;
changer_mc.addEventListener(MouseEvent.MOUSE_DOWN, removeEvent);
function removeEvent(e:MouseEvent): void {
colorChange_mc.removeEventListener(MouseEvent.MOUSE_OVER, changeColor);
}
问候。
答案 1 :(得分:0)
问题是,为了删除侦听器,您必须识别最初传递给它的函数。但是你没有参考这个函数,因为它是匿名的,并且存在于全局范围内。
思考面向对象。将所有改变颜色的功能放入一个类中。你真正想做的就是
在colorChange_mc
类中添加两个方法,可以执行此操作:
public function set color(value:uint):void
和
public function set disable(value:Boolean):void
或者,你可以override
enabled
setter函数将你的逻辑绑定到它,如果这是你想要的。
通过这种方式,您可以将当前主要时间线上的大部分代码重构为类。
答案 2 :(得分:0)
根据我的第一个答案,您对新事实的评论是使用Dictionary
...更多按钮/颜色的解决方案...
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.utils.Dictionary;
import flash.display.MovieClip;
var normalColor: ColorTransform = new ColorTransform();
normalColor.color = 0x000033;
//button1-30 are the instancenames of your buttons
var initObj:Array=[{btn:button1, color:0xFFFFFF},
{btn:button2, color:0xFF0000},
{btn:button3, color:0x00FF00},
...
{btn:button30, color:0x000000},
];
var dict:Dictionary = new Dictionary();
initButtons();
function initButtons():void
{
for each (var item:Object in initObj)
{
var btn = item.btn;
btn.addEventListener(MouseEvent.MOUSE_OVER, changeColor);
btn.addEventListener(MouseEvent.MOUSE_OUT, changeColorToNormal);
dict[btn] = {color:item.color};
}
}
function changeColor(e:MouseEvent):void
{
var btn:MovieClip = e.target as MovieClip;
var color:uint = dict[btn].color;
var cT:ColorTransform=new ColorTransform();
cT.color = color;
colorChange_mc.transform.colorTransform = cT;
}
function changeColorToNormal(e:MouseEvent):void
{
colorChange_mc.transform.colorTransform = normalColor;
}
问候。
答案 3 :(得分:0)
感谢您的回复。正如我之前所说,上面发布的代码只是一个例子。对不起,如果我问不清楚的问题。我通过在按下colorChange按钮时禁用某些特定按钮来解决我的问题。
_userCardsButtons_mc.mouseEnabled = false;
_userCardsButtons_mc.mouseChildren = false;
_userCardsButtons_mc.buttonMode = false;
此代码禁用了我之前添加的事件侦听器。