gpt4 book ai didi

actionscript-3 - as3 - 从父 swf 到子 swf 的 dispatchEvent

转载 作者:行者123 更新时间:2023-12-04 06:40:36 27 4
gpt4 key购买 nike

我有一个加载其他几个 swf 的主要“父” swf。如果主 swf 发生了什么事,我需要告诉其中一个子 swf。

反过来,这似乎效果很好。任何 child 都可以简单地 dispatchEvent(),我可以设置主 swf 来监听事件。但是,我无法让子 swf 捕获父发送的任何事件。它是如何完成的?

最佳答案

好的,所以如果您已经知道其中的大部分内容,我很抱歉……但这似乎是一个很常见的问题,并且不是很明显。

在 AS3 中,由显示列表上的对象调度的事件可以在它们在显示列表层次结构中冒泡时被监听,而无需指定原始对象。 (当然假设事件的冒泡属性设置为 true)。因此,文档类(_root 的旧概念)可以响应来自任何显示对象的鼠标点击,无论嵌套多深,

addEventListener(MouseEvent.CLICK, _onMouseClick)

In any other situation - e.g. bubbling is set to false, the broadcaster is not an InteractiveObject on the display list or, (as in your case) the listener is lower than the broadcaster in the display list hierarchy - the object broadcasting the event must be specifically listened to:

fooInstance.addEventListener(Event.BAR, _bazFunc)
as opposed to just
addEventListener(Event.BAR, _bazFunc)

Basically you need to pass a reference to the parent object to your child swf so that it can then attach event handlers to it.

One method is to dispatch an event from the child to the parent class via the display list (once the child has loaded and fully initialised). The parent uses the event.target property of this event to reference the child and set a parentClass variable on it. This can then be used to attach listeners:

package {


class ChildClass
{
private var __parentClass:ParentClass;

// EventID to listen for in ParentClass
public static const INITIALISED:String = "childInitialised";

// Constructor
function ChildClass()
{
// Do initialising stuff, then call:
_onInitialised();
}

private function _onInitialised():void
{
// Dispatch event via display hierarchy
// ParentClass instance listens for generic events of this type
// e.g. in ParentClass:
// addEventListener(ChildClass.INITIALISED, _onChildInitialised);
// function _onChildInitialised(event:Event):void {
// event.target.parentClass = this;
// }
// @see mutator method "set parentClass" below
dispatchEvent(new Event(ChildClass.INITIALISED, true);
}

public function set parentClass(value:ParentClass):void
{
__parentClass = value;

// Listen for the events you need to respond to
__parentClass.addEventListener(ParentClass.FOO, _onParentFoo, false, 0, true);
__parentClass.addEventListener(ParentClass.BAR, _onParentBar, false, 0, true);
}

private function _onParentFoo(event:Event):void
{
...
}
}
}

调度自定义 ChildSWFEvent - 即,而不是使用上面的类定义常量 - 将使其成为更灵活的解决方案,因为 ParentClass 实例可以监听由任何子 swf 广播的常见 ChildSWFEvent.INITIALISED 事件,其中上下文有用的信息作为附加传递范围。

关于actionscript-3 - as3 - 从父 swf 到子 swf 的 dispatchEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1387568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com