AS3:事件侦听器未触发



我是AS3/Flash的新手,正在学习事件处理。 我有一个调度事件的"Bell"类,如果我将事件侦听器添加到该 Bell 类的实例中,它可以正常工作。 不过,这不是我想要的。 我还有另一堂课,宠物,我想听铃声。 我从铃铛上看到了痕迹,但没有看到宠物的痕迹。

这是铃铛的代码:

public class Bell extends EventDispatcher {
    public static const BELL_RING:String = "bellRing";
    public static const RING_INTERVAL:int = 1500;
    private var ringIntervalID:int;
    public function Bell()
    {
        ringIntervalID = setInterval(ringBell,RING_INTERVAL);
    }
    public function ringBell():void {
        trace("RINGING THE BELL");
        dispatchEvent(new Event(Bell.BELL_RING));
    }
}

。对于宠物:

public class VirtualPet {
    private var senseOfHearing:EventDispatcher = new EventDispatcher();
    public function Pet(name:String):void
    {
        senseOfHearing.addEventListener(Bell.BELL_RING,heardBell);
    }
    public function heardBell(e:Event):void {
        trace("Pet hears bell ringing");
    }
}

。对于主类:

public class VirtualZoo extends Sprite
{
    public function VirtualZoo()
    {
        var bell:Bell = new Bell();
        var pet:VirtualPet = new VirtualPet('Stan');
    }
}

任何帮助都非常感谢! 事件已正确导入,并且没有编译器错误。

有几种方法可以做到这一点,这是最直接的...

public function Pet(name:String, bell:Bell):void {
    bell.addEventListener(Bell.BELL_RING, heardBell)
}

然后:

myBell = new Bell()
myPet = new Pet("dog", myBell)

或。。。

如果贝尔是宠物的孩子,那么你可以将事件冒泡到显示列表中并在宠物中捕获它(但我怀疑情况是否如此)。

或。。。

您可以使用代理类(如senseOfHearing),并将该实例传递给 Bell 和 Dog,并使用它来在两者之间调度事件。

编辑
根据您的评论:

var bells:Array = [];
// add some bells
var pet:Pet = new Pet("Marvin", bells);
public function Pet(name:String, bells:Array):void {
    for (var i:int = 0; i < bells.length; i++) {
        bells[i].addEventListener(Bell.BELL_RING, heardBell);
    }
}

最新更新