as3:制作动画

时间:2011-11-20 22:50:01

标签: actionscript-3 flex

我在AS3和flex4中玩动画,我遇到了问题。我的应用程序是游戏板(如棋盘),其中每个字段都是添加到某个位置的边框容器。

此外,我在鼠标单击时向此容器添加子元素(形状)。我想要实现的是能够将形状从一个场平滑地移动到另一个场。但似乎形状以这种方式落后于邻居区域http://screencast.com/t/iZ3DCdobs

我相信这是因为shape是特定边框容器的子项,并且为了使其在每个其他容器上都可见,我需要以某种方式使用图层....

如果有人能提出解决方案我会很高兴

3 个答案:

答案 0 :(得分:1)

是的,你是对的。您应该将可移动对象添加到其他图层。 由于AS中没有典型的图层,您可以尝试将一个精灵中的字段和任何其他对象拖放到不同的对象上,而不是将它们放在彼此上,这样当您移动对象时它不会落后于其他对象

如果将两个精灵放在相同的位置,您仍然可以在可移动的物体和场之间保持准确的x,y位置。

答案 1 :(得分:1)

您有两种选择:

第一个是为DisplayObjects设置不同的层:例如,底层将容纳所有板,而上层将容纳所有块。

第二个选项是使用swapChildren()swapChildrenAt()setChildIndex()来操纵对象的索引。因此,要将MovieClip置于最顶端,您可以执行MovieClip(parent).setChildIndex(this, 0);

答案 2 :(得分:0)

如果情况总是形状对象隐藏在下一个(右侧)网格容器后面,我建议您反向创建网格。

假设您正在创建一个国际象棋网格。这是一个8x8网格。通常你会使用2 for循环创建你的网格,从0到8循环,比如第一个网格的x和y点从0,0开始直到结束。我建议你做的是从8,8到0,0创建。

闪存中的显示对象根据其子索引堆叠在一起。

例如:如果您创建两个对象。矩形和圆形如下

var rect:Rectangle = new Rectangle();
this.addChild(rect);
var circ:Circle = new Circle();
this.addChild(circ);

在这种情况下,圆圈将始终位于矩形的顶部,因为圆圈是在矩形之后添加到显示列表中的。 因此,如果您颠倒创建网格的顺序,则右网格单元格将首先添加到显示列表中,因此左侧的网格单元格将始终位于右侧网格单元格的顶部。因此,您所面临的问题不会发生。