возможна перегрузка обработчика событий? - PullRequest
0 голосов
/ 20 января 2010

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

Если бы кто-нибудь мог, пожалуйста, просветить меня, я был бы признателен.

Ответы [ 2 ]

3 голосов
/ 20 января 2010

Если вы используете ActionScript 2, то я хотел бы использовать для этого класс делегата . Это позволит вам изменить область вызова метода. Это изменит ваш код на это:

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 голосов
/ 20 января 2010

Используйте для этого внутреннюю функцию, чтобы область действия параметра 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();        
}

О sidenote: вы можете захотеть взглянуть на класс Fade , когда хотите анимировать альфа-свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...