2010-01-20 31 views
0

我想擴展我的功能,以更好的設計,我可以傳遞畫布對象,所以我不必寫N功能..我不知道如何正確地做到這一點,我想出了一個開關天真的設計,但即使如此,如果我添加另一個畫布,我仍然需要爲新畫布編寫新代碼。重載事件處理程序可能嗎?

function fadeCanvasOut(event:TimerEvent):void 
{ 
canvas1.alpha -= 0.1; 
} 

private function showForm():void 
{ 
var myTimer:Timer = new Timer(20, 10); 
myTimer.addEventListener("timer", fadeFormIn); 
myTimer.start();   
} 

我需要的是這樣的:

function fadeCanvasOut(event:TimerEvent, aCanvas:Canvas):void 
{ 
aCanvas.alpha -= 0.1; 
} 

private function showForm(aCanvas:Canvas):void 
{ 
var myTimer:Timer = new Timer(20, 10); 
myTimer.addEventListener("timer", fadeFormIn(timerEvent, canvas1); 
myTimer.start();   
} 

,如果有人可以請賜教我將不勝感激。

回答

3

如果您使用的是ActionScript 2,那麼我會考慮使用the Delegate class。它將允許您更改方法調用的範圍。這將你的代碼改成這樣:

import mx.utils.Delegate; 

function fadeCanvasOut(event:TimerEvent):void 
{ 
    this.alpha -= 0.1; 
} 

private function showForm():void 
{ 
    var myTimer:Timer = new Timer(20, 10); 
    myTimer.addEventListener("timer", Delegate.create(canvas1, fadeCanvasOut); 
    myTimer.start();   
} 

如果您使用的是ActionScript 3,代表們現在已經內置到語言(他們取消Delegate類,並就這事件被解僱的範圍元素函數調用)。這意味着不再可以使用您使用委託類來將範圍更改爲您想要的範圍。所以你現在需要這樣寫:

function fadeCanvasOut(event:TimerEvent, aCanvas:Canvas):void 
{ 
    aCanvas.alpha -= 0.1; 
} 

private function showForm():void 
{ 
    var myTimer:Timer = new Timer(20, 10); 
    myTimer.addEventListener("timer", function(event:TimerEvent):void { 
     fadeCanvasOut(event, canvas1); 
    }); 
    myTimer.start();   
} 
+0

Delegate類是一個ActionScript 2類,在Flex 3 SDK中不可用。 – 2010-01-20 16:58:22

+0

@Christophe:在AS3中創建Delegate類只需幾行... – back2dos 2010-01-20 17:16:12

+0

@ back2dos:是的。我只是回答了給出的答案,這在ActionScript 3.0的上下文中是不正確的。顯然,這是不被某些人接受的,並且是降低正確答案的原因... – 2010-01-20 17:25:21

0

爲此使用一個內部函數,所以canvas參數的作用域將被保留。

function fadeCanvasOut(event:TimerEvent, aCanvas:Canvas):void { 
    aCanvas.alpha -= 0.1; 
} 

private function showForm(aCanvas:Canvas):void { 
    var myTimer:Timer = new Timer(20, 10); 
    myTimer.addEventListener("timer", function(event:TimerEvent):void { 
    fadeCanvasOut(aCanvas); 
    }); 
    myTimer.start();   
} 

在一個旁註:你可能想看看Fade類時要進行動畫處理的alpha屬性。

+0

給了你一個投票試圖幫助和通知我關於Fade clas ..謝謝! – jr3 2010-01-20 19:43:12