stage.addChild和分层

sta*_*npc 3 actionscript-3

我有一个简单的功能,当你点击一个按钮时,将一个影片剪辑添加到舞台上的随机x和y位置.我遇到的问题是新的电影剪辑最终掩盖了按钮.我试图将新创建的mc的z-index更改为低于按钮的z-index,但这并不能解决问题.如何阻止新的mc覆盖已经存在的元素.

    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);
}
Run Code Online (Sandbox Code Playgroud)

小智 12

或者 - 或者更多使用longterm - 不要将所有添加的对象作为与按钮相同的图层的子对象.

所以代替:

stage
  |
  +--- object 1
  |
  +--- object 2
  |
  +--- button
  |
  +--- object 3
Run Code Online (Sandbox Code Playgroud)

有:

stage
  |
  +--- object layer
  |       |
  |       +--- object 1
  |       |
  |       +--- object 2
  |
  +--- button
Run Code Online (Sandbox Code Playgroud)

甚至:

stage
  |
  +--- object layer
  |       |
  |       +--- object 1
  |       |
  |       +--- object 2
  |
  +--- button layer
          |
          +--- button
Run Code Online (Sandbox Code Playgroud)

在哪里object layer,button layer可能只是Sprite对象,即:

var objectLayer:Sprite=new Sprite();
var buttonLayer:Sprite=new Sprite();
stage.addChild(objectLayer);
stage.addChild(buttonLayer);
buttonLayer.addChild(myButton);
Run Code Online (Sandbox Code Playgroud)

等等.

我认为你会发现长期思考这种方式更有用,而不仅仅是改变z指数.

顺便提一下,更新的Flash Player 10 确实有一个.z属性(即使它不在文档中) - 正如Reuben所说,它用于新的3D变换.遗憾的是,3D变换对z排序或z分层没有任何支持,所以在这种情况下没有帮助.