4

如何使用 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。

任何帮助,将不胜感激。

编辑:

@ 81bronco,我试过了,但是实例名称对于图形是灰色的,它只允许我使用影片剪辑和按钮来完成。我通过将它们变成moveclip,并在添加新的之前清除moveclip中的图像(使用比vanhornRF建议的更简单的东西)来完成它的工作,但是由于某些奇怪的原因,当我清除了图像中的蒙版时回来看面具动画。

4

4 回答 4

3

要在舞台上引用某些东西,您需要给舞台实例一个名称——而不是给库中的符号一个类名。

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

在您的代码的其他地方,您可以通过它的实例名称在舞台上引用该项目。

于 2008-09-04T13:17:18.693 回答
1

它应该是这样的:

imageHolder.removeChild( imageIndex )

或者

imageHolder.removeChildByName( imageName )

在那之后

imageHolder.addChild( newImage )
于 2008-09-04T10:49:42.560 回答
0

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

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 如果您想唯一地引用它们,则绝对应该在舞台上命名您的资产,以避免在舞台上有很多物品时造成任何混淆

于 2008-09-04T18:02:30.473 回答
0

Hey Re0sless, when you remove those items from the stage do they have any event listeners attached to them, any timers or loaders? Any of those things can make an object stick around in flash's memory and not remove properly. Also on top of just removing the item, perhaps try nulling it as well? Sometimes that helps in clearing out its references so it can be properly destroyed.

Of course it could also be something silly like removing the item at one instance doesn't remove the item from future frames as well, but I really don't think that's the case.

于 2008-09-04T18:42:56.977 回答