如何使用 ActionScript 3 在 Flash 中引用舞台上的位图?

我在 Flash 中的舞台上有一个位图,在电影结束时我想在电影循环之前将其交换为序列中的下一个。在我的库中,我有 3 个图像,导出为 ActionScript,类名为 img1/img2/img3。这是我在 Flash 中的图层的设置方式。

layer 5 : mask2:MovieClip
layer 4 : img2:Bitmap
layer 3 : mask1:MovieClip
layer 2 : img1:Bitmap
layer 1 : background:Bitmap

在电影结束时,我想将 img1 与 img2 交换,以便电影无缝循环,然后理想情况下将 img2(在第 4 层)与 img3 交换,依此类推,直到到达图像末尾。

但我不知道如何引用已经放在舞台上的图像(在设计时),有人知道如何做到这一点吗?

最终的电影有望从网络服务器动态加载图像(我有这方面的代码)并显示它们以及 img1/img2/img3。

任何帮助,将不胜感激。

编辑:

@81野马 ,我尝试了这个,但实例名称对于图形来说是灰色的,它只允许我使用影片剪辑和按钮来完成此操作。我通过将它们变成 moveclip 并在添加新图像之前清除 moveclip 中的图像(使用更简单的东西来完成它的工作) 范霍恩射频 建议),但由于某种奇怪的原因,当蒙版进入图像时,我清除了蒙版动画。

有帮助吗?

解决方案

要引用舞台上的某些内容,您需要为舞台实例指定一个名称 - 而不是为库中的元件指定一个类名称。

单击舞台上的项目并查看属性面板。项目尺寸输入框上方应该有一个文本输入框。在那里输入一个名字。

然后,您可以在代码的其他位置通过实例名称引用舞台上的该项目。

其他提示

它应该是这样的:

imageHolder.removeChild( imageIndex )

或者

imageHolder.removeChildByName( imageName )

在那之后

imageHolder.addChild( newImage )

我可能会在你的文档类中做类似的事情

for(var i:int=0; i<numChildren; i++){
    trace(getChildAt(i),"This is the child at position "+i);
}

我这样做是因为我仍然在 flash IDE 中进行编码,并且它的调试器在大多数情况下工作起来非常痛苦,因此更容易跟踪变量,因此您可以使用 for 循环来打印当前项目的对象名称在您的舞台上,或者也使用调试程序来查找对象。

现在您有了孩子以及它们在舞台中实际所处的索引,您可以通过调用 getChildAt(int) 来引用它们,您可以removeChildAt(int),您可以 addChildAt(displayObject, int) 和 swapChildrenAt(int, int) )。这些参数中的 int 将表示跟踪语句返回的索引位置,而 displayObject 显然仅表示您想要添加到舞台或父 DisplayObject 的任何内容。

使用这 4 个命令,您应该能够自由地重新排列舞台上的任何影片剪辑,以便它们看起来无缝过渡。

@81bronco 如果您想专门唯一地引用您在舞台上的资产,那么绝对应该在舞台上命名它们,以避免在舞台上有很多物品时出现任何混乱

嘿 Re0sless,当您从舞台上删除这些项目时,它们是否附加了任何事件侦听器、任何计时器或加载程序?任何这些因素都可能导致对象留在闪存内存中并且无法正确删除。除了删除该项目之外,也许还可以尝试将其归零?有时这有助于清除其引用,以便可以正确地销毁它。

当然,这也可能是一些愚蠢的事情,比如在一个实例中删除该项目并不会从未来的帧中删除该项目,但我真的不认为情况是这样。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top