2010-01-20 5 views
0

Я хочу расширить мою функцию до лучшего дизайна, где я могу передать объект canvas, поэтому мне не нужно писать 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, делегаты теперь встроены в языке (они удалены класс делегата, и сделали элемент, на котором событие было уволена сфера действия вызов функции). Это означает, что вы больше не можете использовать вас, используя класс делегата, чтобы изменить область действия на то, что вы хотите. Так что теперь нужно будет написать так:

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 и недоступен в SDK Flex 3. –

+0

@Christophe: это вопрос нескольких строк для создания класса Delegate в AS3 ... – back2dos

+0

@ back2dos: Да, это так. Я просто отвечал на ответ, который неверен в контексте ActionScript 3.0. По-видимому, это неприемлемо для некоторых, и это является причиной для правильного ответа на вопрос ... –

0

Используйте внутреннюю функцию для этого, поэтому сфера применения параметра холст будет сохранен.

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 классе, когда вы хотите анимировать свойство альфа.

+0

Дал вам попытку помочь и проинформировать меня о Fade clas .. спасибо! – jr3

Смежные вопросы