簡體   English   中英

一項功能與多項功能的性能

[英]Performance of one function vs. multiple

我在舞台上有很多拖放對象,默認代碼段為舞台上的每個對象添加了一個新的事件偵聽器和函數:

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);
function fl_ReleaseToDrop(event:MouseEvent):void { instance_1.stopDrag(); }
stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop_1);
function fl_ReleaseToDrop_1(event:MouseEvent):void { instance_2.stopDrag(); }
....

將它們全部放在一個聽眾中會更好還是更壞?

stage.addEventListener(MouseEvent.MOUSE_UP, fl_ReleaseToDrop);
function fl_ReleaseToDrop(event:MouseEvent):void {
  instance_1.stopDrag();
  instance_2.stopDrag();
  ....
}

一個函數調用肯定比多個函數調用快。 但是,這里的差異可以忽略不計。

從代碼可讀性的角度來看,我想說的是您展示的單個函數調用更好。


通常,我喜歡拖放的方式是在開始拖動時添加mouseUp處理程序,並在完成拖動后立即將其刪除。 例如:

instance1.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
instance2.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
instance3.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);

function mouseDown(e:MouseEvent):void {
    Sprite(e.currentTarget).startDrag();
    stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
}

function mouseUp(e:MouseEvent):void {
    stopDrag();
    stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);
}

對於Flash時間軸簡單高效的解決方案,您只需保持引用對象即可,僅此而已:

stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
instance1.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
instance2.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
instance3.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
var draggedObject:Sprite;

function mouseDown(e:MouseEvent):void 
{
    draggedObject = e.currentTarget as Sprite;
    if(draggedObject)
    {
        draggedObject.startDrag();
    }        
}

function mouseUp(e:MouseEvent):void 
{
    if(draggedObject)
    {
        draggedObject.stopDrag();
        draggedObject = null;
    } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM