stage.addChild和分层

问题描述 投票:3回答:6

我有一个简单的功能,当您单击按钮时,会在xy随机位置将影片剪辑添加到舞台上。

我遇到的问题是,新的影片剪辑最终会掩盖按钮。我试图将新创建的影片剪辑的z-index更改为低于按钮的z-index,但这不能解决问题。

如何阻止新影片剪辑掩盖已经存在的元素?

friends1_btn.addEventListener(MouseEvent.CLICK, friendMaker);

function friendMaker(evt:MouseEvent):void {
    var newFriend:Teddy = new Teddy();
    newFriend.x = Math.random()*stage.width;
    newFriend.y = Math.random()*stage.height;
    newFriend.z = 0;
    stage.addChild(newFriend);
}
actionscript-3
6个回答
12
投票

或者,或者可能更多地使用长期的方法-不要将所有添加的对象都作为与按钮位于同一层的子级。

所以代替:

stage
  |
  +--- object 1
  |
  +--- object 2
  |
  +--- button
  |
  +--- object 3

有:

stage
  |
  +--- object layer
  |       |
  |       +--- object 1
  |       |
  |       +--- object 2
  |
  +--- button

甚至:

stage
  |
  +--- object layer
  |       |
  |       +--- object 1
  |       |
  |       +--- object 2
  |
  +--- button layer
          |
          +--- button

object layerbutton layer可以简单地是Sprite对象,即:

var objectLayer:Sprite=new Sprite();
var buttonLayer:Sprite=new Sprite();
stage.addChild(objectLayer);
stage.addChild(buttonLayer);
buttonLayer.addChild(myButton);

依此类推。

[我认为您会发现,长远考虑这种思维方式比将z索引转向四周更有用。

顺便说一下,更新的Flash Player 10 does具有.z属性(即使它不在文档中)-如Reuben所说,它用于新的3D变换。可悲的是,3D转换不支持z排序或z分层,因此在这种情况下无济于事。


2
投票

我知道已经回答了这个问题,但是您也可以使用addChildAt()来指定要在其中添加DisplayObject的索引,可以使用numChildren,或者保留自己要添加的索引的记录。

private var friends1_btn:Sprite;

function friendMaker(evt:MouseEvent):void
{
    var newFriend:Teddy = new Teddy();
    newFriend.x = Math.random()*stage.width;
    newFriend.y = Math.random()*stage.height;
    stage.addChildAt(newFriend, stage.numChildren-1);
    //or if your not sure if the button will always be on top
    stage.addChildAt(newFriend, stage.getChildIndex(friends1_btn)-1);
}

您不希望继续在舞台上添加原始按钮,因为这将继续触发事件Event.ADDED_TO_STAGE,这也将导致闪烁,因为由于显示列表的工作方式,该按钮会短暂地从舞台上删除。


0
投票

MovieClip在AS3 (reference)中没有名为'z'的属性”>

您应该阅读AS3的新display list模型。它应该可以帮助您了解如何将对象层叠在一起。


0
投票

swapChildren()


0
投票

这样无论您做什么,都将确保按钮是最重要的项目。在已添加的内容(在同一容器中)上调用addChild会将其读取到顶部。


0
投票

MovieClip的“ z”属性用于Flash Player 10中的3D转换-相反,您需要显式设置MovieClip的子索引

© www.soinside.com 2019 - 2024. All rights reserved.