gpt4 book ai didi

actionscript-3 - 有没有办法在加载的 SWF 中监听 flash.display.DisplayObject 可见性的变化?

转载 作者:行者123 更新时间:2023-12-05 00:42:15 25 4
gpt4 key购买 nike

我正在使用 flash.display.Loader 加载外部 SWF(由我工作的公司的其他部门预先制作) .然后我遍历显示列表,注册所有对象并监听添加/删除的事件以处理列表的 future 更改。

var obj:DisplayObjectContainer = loadEvent.currentTarget.content as DisplayObjectContainer;
var count:Number = obj.numChildren;
for (var i:Number = 0; i < count; i++)
{
registerObject(obj.getChildAt(i));
}
obj.addEventListener(Event.ADDED, onChildAdded);
obj.addEventListener(Event.REMOVED, onChildRemoved);

问题是我想知道如果原始 SWF 的开发者之一使用:
.visible = true / false;
有没有办法可以监听 .visible 属性的变化?
或任何其他属性(不会触发内置事件)与此有关?

最佳答案

不是默认的,我不认为。但是您可以创建自己的 Event 类并从 function set Visible 的覆盖中调度它没有很多麻烦。

编辑:
好的,所以 a_w 确实有正确的想法,您可以将其附加回容器中。

像这样制作一个包装器:

public class VisibilityEnabledDisplayObject extends DisplayObject
{
public function VisibilityEnabledDisplayObject(d:DisplayObject)
{
super();
_d = d;
}
public function override get visible(b:Boolean):Boolean
{
return this._d.visible;
}
public function set visible(b:Boolean):void
{
if(this._d.visible != value)
{
this._d.visible = value;
this.dispatchEvent(new Event('visibilityChanged'));
}
}
private var _d:DisplayObject;
}

然后,让你的循环看起来像:
for (var i:int = 0; i < count; i++)
{
var do:DisplayObject = obj.getChildAt(i);
registerObject(do);
obj.removeChildAt(i);
var vedo:VisibilityEnabledDisplayObject = new VisibilityEnabledDisplayObject(do);
obj.addChildAt(vedo, i);
// register whatever listener you like with the vedo here
}

那么setter方法应该被多态地调用。您可能必须通过 VisibilityEnabledDisplayObject 装饰器传递整个公共(public) DisplayObject 接口(interface),我现在不记得了......

关于actionscript-3 - 有没有办法在加载的 SWF 中监听 flash.display.DisplayObject 可见性的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2276147/

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