我想将我的功能扩展到更好的设计,我可以将画布对象传递到哪里,所以我不必编写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();
}
如果有人可以请你开导我会很感激。
答案 0 :(得分: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();
}
答案 1 :(得分: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();
}
旁注:如果要为alpha属性设置动画,可能需要查看Fade类。