关于IEventDispatcher的问题

时间:2011-05-20 05:02:40

标签: flash

IEventDispatcher背后的逻辑是什么?

这是我见过的代码:

var elements : Array = new Array();
var elements2 : Array = new Array();

for (var i:int = 1; i <= 5; i++) {
    elements[i] = this['obj' + i];
    elements2[i] = this['tracking' + i];
}

for each(var element_1 : IEventDispatcher in elements){
    element_1.addEventListener(MouseEvent.MOUSE_OVER, moveUp);  
}

for each(var element_2 : IEventDispatcher in elements2){
    element_2.addEventListener(MouseEvent.MOUSE_OUT, moveDown);
}

function moveUp(e:MouseEvent):void{
     e.currentTarget.y -= 30;
}

function moveDown(e:MouseEvent):void{
     elements[elements2.indexOf(e.currentTarget)].y += 30;
}

1 个答案:

答案 0 :(得分:1)

我不确定你在问什么..使用IEventDispatcher背后的逻辑是它输入的for each()循环和IEventDispatcher是应用于循环的类型。这基本上意味着ArrayVector中的所有内容都是IEventDispatcher或继承自IEventDispatcher

以下是使用for each类型的MovieClip示例:

var mcs:Array = [new MovieClip(), new MovieClip()];

var i:MovieClip;
for each(i in mcs)
{
    trace(i);
}

在操作for eachArray中的元素时,Vector比循环标准要快得多,因为它不需要花费太多时间来计算对象的实际内容是

唯一需要知道的是,如果循环的数组中的任何内容都不是TypeError,则会抛出MovieClip