永远不会调度时间轴放置实例中嵌套的动画片段上的事件

时间:2011-12-30 02:42:36

标签: flash actionscript-3

我是一名AS3代码开发人员,但这次我需要处理一个FLA,该FLA在时间轴上有一个复杂的动画片段和文本域嵌套(通过Flash中的实例字段命名)。 问题是从那个时间轴放置的实例中的嵌套动画片段上的事件(我放入Documentclass)永远不会被调度。

示例代码:

// my instance on Stage in all Frames of the timeline
public var thewall:MovieClip;

// event directly on thewall works 
// the event is dispatched correctly
thewall.addEventListener(MouseEvent.CLICK,click);


// event on nested MovieClip userSharePost fails 
// the event is not dispatched
thewall.userSharePost.addEventListener(MouseEvent.CLICK,click);


// event on nested TextField field1 fails as well
// the event is not dispatched
thewall.userSharePost.field1.addEventListener(TextEvent.LINK, linkCpechEvent);

我如何访问它们以调度事件?

非常感谢你,丹尼斯

2 个答案:

答案 0 :(得分:0)

通常,您不会将事件处理程序添加到主(阶段)时间轴中的嵌套动画片段中。 movieclip本质上是一个类,所有嵌套的动画片段都是该类的属性。因此,通过OOP的逻辑,动画片段内的所有动画片段在单击时的行为方式应该相同。这意味着您将在父动画片段的舞台上添加事件侦听器到嵌套的动画片段(如果你理解我的意思)。

答案 1 :(得分:0)

您可以在父动画片段上放置一个“onClick”事件侦听器,并让处理程序检查事件currentTarget。您需要监听事件的方式的问题是,一旦您将onClick侦听器分配给“thewall”动画片段,它就会“阻止”它的子节点上的事件 - 即使您仍然可以看到它的原始源currentTarget中的事件。

根据我的经验,最好的做法是让一个监听器检查事件源,或者,不是在“thewall”的实例上附加“onClick”,而是在底层有一个额外的透明动画片段在里面“thewall”并将click事件附加到它上面 - 这样它上面的所有动画片段都会触发它们各自的事件,并且单击容器剪辑的主体将自动触发它。