AS3Signals
quarta-feira, 27 de janeiro de 2010Robert Penner, criador das funções de easing em actionscript que, sabendo ou não, TODO MUNDO usa, não estava satisfeito com o modelo de eventos do Actionscript 3, e criou uma alternativa baseada, segundo ele, nos modelos do C# e Qt: as3-signals.
Para exemplificar rapidamente, o que no modelo de eventos padrão do AS3 seria:
public class SomeListener {
public function SomeListener() {
ball.addEventListener( BallEvent.BOUNCE, onBallBounce );
}
private function onBallBounce( event : BallEvent ) {
trace("bola pulou");
}
}
import flash.events.EventDispatcher;
class Ball extends EventDispatcher {
public function foo() {
dispatchEvent( new BallEvent( BallEvent.BOUNCE ) );
}
}
… com as3-signals, seria algo como:
public class SomeListener {
public function SomeListener() {
ball.bounce.add(onBallBounce);
}
private function onBallBounce() {
trace("bola pulou");
}
}
import org.osflash.signals.Signal;
class Ball {
public var bounce : Signal = new Signal();
public function foo() {
bounce.dispatch();
}
}
Já há por aí comparações impressionantes de desempenho, mas, acima de tudo, a vantagem é de uma implementação mais clara e simples, resultando que a classe que dispara eventos não precisa estender EventDispatcher. Isso, numa linguagem como AS3, que não permite herança múltipla como Python ou C++, logo se demostra fundamental.
Baixe fontes e SWC na página do projeto.
