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 AS3-在显示列表中向下发送事件(而不是向上)_Flash_Actionscript 3_Events_Event Handling - Fatal编程技术网

Flash AS3-在显示列表中向下发送事件(而不是向上)

Flash AS3-在显示列表中向下发送事件(而不是向上),flash,actionscript-3,events,event-handling,Flash,Actionscript 3,Events,Event Handling,考虑以下情况(psuedo代码): 我可以将事件从城市发送到全国,如下所示(在城市类中): 因为事件会在显示列表中出现气泡。但是我怎样才能从乡村班上安排一个活动,让城市听到呢?当我向城市添加事件侦听器时,从国家/地区发送的事件不会注册。您可以通过引用其父城市的父城市将城市设置为侦听器 class City extends Sprite { public function City() { this.addEventListener(Events.ADDED_TO_

考虑以下情况(psuedo代码):

我可以将事件从城市发送到全国,如下所示(在城市类中):


因为事件会在显示列表中出现气泡。但是我怎样才能从乡村班上安排一个活动,让城市听到呢?当我向城市添加事件侦听器时,从国家/地区发送的事件不会注册。

您可以通过引用其父城市的父城市将城市设置为侦听器

class City extends Sprite
{
    public function City()
    {
        this.addEventListener(Events.ADDED_TO_STAGE, this.foo()); // P.S. Verify event type. This is over the top of my head.
    }

    private function addedToStage(e:Event):void
    {
        this.parent.parent.addEventListener(Country.EVENT_TYPE, this.foo());
    }

    private function foo(e:Event):void
    {
        // Handle event
    }
}

现在所有这些都很好,但是可能有更好的方法来构建代码。现在,您有一个循环依赖项,如果没有正确清理,可能会导致内存泄漏。如果你能详细说明你的要求,也许有人能提出另一种方法。

你可以通过参考父母的父母,把一个城市设置为一个倾听者

class City extends Sprite
{
    public function City()
    {
        this.addEventListener(Events.ADDED_TO_STAGE, this.foo()); // P.S. Verify event type. This is over the top of my head.
    }

    private function addedToStage(e:Event):void
    {
        this.parent.parent.addEventListener(Country.EVENT_TYPE, this.foo());
    }

    private function foo(e:Event):void
    {
        // Handle event
    }
}

现在所有这些都很好,但是可能有更好的方法来构建代码。现在,您有一个循环依赖项,如果没有正确清理,可能会导致内存泄漏。如果您能详细说明您的需求,可能会有人提出另一种方法。

您可以使用singleton eventdispatcher类,在这种情况下可能非常方便。

您可以使用singleton eventdispatcher类,在这种情况下可能非常方便。

可能不理想,但是我只是从子对象中将侦听器添加到舞台上,因此当它向舞台上冒泡时,它会捕获事件。

可能不理想,但我只是从子对象中将侦听器添加到舞台上,因此当它向舞台上冒泡时,它会捕获事件。

嗯,它可能有两层以上的深度,所以我不想走父母之路。必须有更好的方法让对象“向下”显示列表以侦听事件?您似乎正在构建某种层次结构。在这种情况下,您应该使用常规的消息传递模式,而不是让任意节点为其父节点设置侦听器。查找树视图的实现以理解我的意思。如果您确实这样做,那么您应该让国家/地区节点在列表中存储对其子节点的引用,然后在必须触发事件时遍历列表。子节点将类似地拥有自己的子节点列表,并将消息传递给每个子节点。这种方法消除了循环依赖,并且更容易维护。嗯,它可能有两层以上的深度,所以我不想走parent.parent的道路。必须有更好的方法让对象“向下”显示列表以侦听事件?您似乎正在构建某种层次结构。在这种情况下,您应该使用常规的消息传递模式,而不是让任意节点为其父节点设置侦听器。查找树视图的实现以理解我的意思。如果您确实这样做,那么您应该让国家/地区节点在列表中存储对其子节点的引用,然后在必须触发事件时遍历列表。子节点将类似地拥有自己的子节点列表,并将消息传递给每个子节点。这种方法消除了循环依赖,并且更易于维护。
class City extends Sprite
{
    public function City()
    {
        this.addEventListener(Events.ADDED_TO_STAGE, this.foo()); // P.S. Verify event type. This is over the top of my head.
    }

    private function addedToStage(e:Event):void
    {
        this.parent.parent.addEventListener(Country.EVENT_TYPE, this.foo());
    }

    private function foo(e:Event):void
    {
        // Handle event
    }
}