Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 如何从一个类中分派事件,并在另一个非';你不是第一流的孩子或家长吗?_Flash_Actionscript 3_Event Handling_Event Listener_Dispatchevent - Fatal编程技术网

Flash 如何从一个类中分派事件,并在另一个非';你不是第一流的孩子或家长吗?

Flash 如何从一个类中分派事件,并在另一个非';你不是第一流的孩子或家长吗?,flash,actionscript-3,event-handling,event-listener,dispatchevent,Flash,Actionscript 3,Event Handling,Event Listener,Dispatchevent,我正在用AS3做一个游戏。我有三个类(宇宙飞船、UFO和记分板),它们都是GameEngine类的子类 我想在记分板中放置eventListeners,然后从宇宙飞船和UFO发送dispatchEvents以更新记分板实例 由于Spaceship和UFO既不是Scoreboard的父对象,也不是子对象,因此向dispatchEvent添加bubbling=true参数不会产生任何效果 如何让记分板在不执行以下操作的情况下侦听*dispatchEvent*s: GameEngine.scorebo

我正在用AS3做一个游戏。我有三个类(宇宙飞船、UFO和记分板),它们都是GameEngine类的子类

我想在记分板中放置eventListeners,然后从宇宙飞船和UFO发送dispatchEvents以更新记分板实例

由于Spaceship和UFO既不是Scoreboard的父对象,也不是子对象,因此向dispatchEvent添加bubbling=true参数不会产生任何效果

如何让记分板在不执行以下操作的情况下侦听*dispatchEvent*s:

GameEngine.scoreboard.dispatchEvent(新事件(“shipWasHit”,true))

这样做似乎很愚蠢。为什么我要使用dispatchEvent——为什么不直接调用该函数?如果我想让其他类监听相同的dispatchEvent呢


请告知。

查看观察者模式。这里有一个很好的链接:


查看观察者模式。这里有一个很好的链接:


由于任何使用捕获阶段或气泡阶段且其传播未被中断的事件都会在阶段中运行,因此您只需在指定类中为阶段添加侦听器即可

示例代码:

public function Receiver()
{
    addEventListener(Event.ADDED_TO_STAGE, added, false, 0, true);
}

private function added(evt:Event):void
{
    stage.addEventListener(Event.shipWasHit, shipHit, false, 0, true);
}

private function shipHit(evt:Event):void
{
    //code
    evt.stopPropagation();
}

现在,这里有一些警告。首先,这个类需要实例化并添加到stage中,以便引用stage。否则,您将需要作为参数传入stage,在某些情况下,它可能返回null。最后,您必须在调度事件之前对其进行实例化,尽管我现在看到的代码似乎没有问题。

因为任何使用捕获阶段或气泡阶段且其传播没有中断的事件都会在该阶段运行,您只需在指定类中为stage添加一个侦听器

示例代码:

public function Receiver()
{
    addEventListener(Event.ADDED_TO_STAGE, added, false, 0, true);
}

private function added(evt:Event):void
{
    stage.addEventListener(Event.shipWasHit, shipHit, false, 0, true);
}

private function shipHit(evt:Event):void
{
    //code
    evt.stopPropagation();
}

现在,这里有一些警告。首先,这个类需要实例化并添加到stage中,以便引用stage。否则,您将需要作为参数传入stage,在某些情况下,它可能返回null。最后,您必须在事件调度之前实例化此项,尽管我现在看到的代码似乎没有问题。

您的宇宙飞船和UFO将执行以下操作:

dispatchEvent(new Event("shipWasHit"));
你的记分板需要知道在这些事件中,哪些宇宙飞船和UFO可以收听:

someShip.addEventListener("shipWasHit", onShipHit);


添加这些听众的一个好地方是在创建那些宇宙飞船和UFO的课堂上,或者在记分板上,如果在某个时候你告诉它要听什么飞船和UFO的话。

你的宇宙飞船和UFO会这样做:

dispatchEvent(new Event("shipWasHit"));
你的记分板需要知道在这些事件中,哪些宇宙飞船和UFO可以收听:

someShip.addEventListener("shipWasHit", onShipHit);


添加这些听众的一个好地方是在创建那些宇宙飞船和UFO的课堂上,或者在记分板上,如果在某个时候你告诉它要听什么飞船和UFO的话。

ah bummer,我把它列为一个很好的链接,因为它以前有一个链接来下载一个佛罗里达州的例子。现在似乎坏了。无论哪种方式,观察者模式都是cha想要的啊,糟糕,我把它列为一个很好的链接,因为它以前有一个链接可以下载一个FLA示例。现在似乎坏了。无论哪种方式,观察者模式都是cha想要的