Actionscript 3 AS3-使对象遮挡特定对象

Actionscript 3 AS3-使对象遮挡特定对象,actionscript-3,overlapping,cover,Actionscript 3,Overlapping,Cover,好的,这里是场景:我有4个对象,A,B,C和D。我想要的是C遮蔽A,但不是B。类似地,我想要D遮蔽B,但不是A。A和B可以以任何顺序相互重叠,这不重要 换句话说,我想要的是一个对象(C)能够覆盖一个对象(A),而不是另一个对象(B),即使它与之接触。与D相同,D可以覆盖B,但不能覆盖A,即使它与B接触。问题是,我想不出一个层配置允许这样做:D总是比a和B都高,因此会模糊两者 我并不期望有人能想出一些高深莫测的聪明配置,但我想知道是否有某种动作脚本可以做到这一点。特别是,我希望A和B是动态文本字段

好的,这里是场景:我有4个对象,A,B,C和D。我想要的是C遮蔽A,但不是B。类似地,我想要D遮蔽B,但不是A。A和B可以以任何顺序相互重叠,这不重要

换句话说,我想要的是一个对象(C)能够覆盖一个对象(A),而不是另一个对象(B),即使它与之接触。与D相同,D可以覆盖B,但不能覆盖A,即使它与B接触。问题是,我想不出一个层配置允许这样做:D总是比a和B都高,因此会模糊两者

我并不期望有人能想出一些高深莫测的聪明配置,但我想知道是否有某种动作脚本可以做到这一点。特别是,我希望A和B是动态文本字段,C和D是任何形状的MovieClips(即不是矩形)


希望这是可能的

将它们添加到舞台的顺序决定了在舞台前面显示的内容。基本上,最后添加的内容在顶部,首先添加的内容在底部


如果你想让C覆盖A而不是B,让D覆盖B而不是A,你就有问题了。想一想,如果这四个部分相互重叠,会发生什么。C将试图覆盖A并让B显示通过,而D将试图覆盖B并让A显示通过。不可能。

将它们添加到舞台的顺序决定了在舞台前面显示的内容。基本上,最后添加的内容在顶部,首先添加的内容在底部


如果你想让C覆盖A而不是B,让D覆盖B而不是A,你就有问题了。想一想,如果这四个部分相互重叠,会发生什么。C将试图覆盖A并让B显示通过,而D将试图覆盖B并让A显示通过。不可能。

您可以使用blitting,在这里您实际上并没有将项目添加到后台,而是使用copyPixels()或draw()来绘制像素。如果这样做,则可以确定将绘制或不绘制对象的哪些部分。查看这篇博客文章,了解这项技术的概述。

你可以使用blitting,在这里,你实际上不是在舞台上添加项目,而是使用copyPixels()或draw()来绘制像素。如果这样做,则可以确定将绘制或不绘制对象的哪些部分。查看这篇博客文章,了解这项技术的概述。

假设我了解您想要的内容,请使用父/包含MovieClip的
setChildIndex()
函数。如果所有ABCD对象都包含在名为parent_mc的MovieClip中,则可以执行以下操作:

parent_mc.setChildIndex(a_mc, parent_mc.numChildren-1); // Throw "a_mc" on top
parent_mc.setChildIndex(b_mc, parent_mc.numChildren-1); // Throw "b_mc" on top
这将导致
b_mc
位于
a_mc
之上,等等

您还可以在显示列表的最底部抛出一些内容:

 parent_mc.setChildIndex(b_mc, 0);

此处的文档:

假设我了解您想要的内容,请使用父/包含MovieClip的
setChildIndex()
函数。如果所有ABCD对象都包含在名为parent_mc的MovieClip中,则可以执行以下操作:

parent_mc.setChildIndex(a_mc, parent_mc.numChildren-1); // Throw "a_mc" on top
parent_mc.setChildIndex(b_mc, parent_mc.numChildren-1); // Throw "b_mc" on top
这将导致
b_mc
位于
a_mc
之上,等等

您还可以在显示列表的最底部抛出一些内容:

 parent_mc.setChildIndex(b_mc, 0);

此处的文档:

您可能应该分享您试图实现的目标,也许人们会提出更好的解决方案……您可能应该分享您试图实现的目标,也许人们会提出更好的解决方案……这正是我要说的。我确实理解分层,这就是为什么我问是否有ActionScript解决方案。你解释我的问题,然后说这是不可能的,这帮不了大忙。正如它所说的不可能(如果没有某种形式的将对象C和D分割成碎片)。你需要重新考虑你的需求,这样至少你知道这是可能的,这样你才能帮助你转换代码。这正是我要说的。我确实理解分层,这就是为什么我问是否有ActionScript解决方案。你解释我的问题,然后说这是不可能的,这帮不了大忙。正如它所说的不可能(如果没有某种形式的将对象C和D分割成碎片)。您需要重新考虑您的需求,这样至少您知道这是可能的,这样就可以帮助您转换代码。BitmapData.draw()看起来就像我想要的。如果我这样做,那么我可以使用循环删除(即,将alpha设置为0)与我不希望文本显示的位重叠的像素。尝试循环并重新绘制单个像素轴不会获得很好的性能。取而代之的是,把整个东西画成透明的,然后画出你想要的部分。啊,对了,谢谢。由于我将多次重新绘制,这可能会很快地一次又一次地重复,因此我可能希望使用此工具获得最佳性能。BitmapData.draw()看起来就是我想要的。如果我这样做,那么我可以使用循环删除(即,将alpha设置为0)与我不希望文本显示的位重叠的像素。尝试循环并重新绘制单个像素轴不会获得很好的性能。取而代之的是,把整个东西画成透明的,然后画出你想要的部分。啊,对了,谢谢。由于我将多次重画,这可能会很快在彼此之后,我可能会想要最好的性能,我可以与这个。