我有一个简单的功能,当您单击按钮时,会在x
和y
随机位置将影片剪辑添加到舞台上。
我遇到的问题是,新的影片剪辑最终会掩盖按钮。我试图将新创建的影片剪辑的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);
}
或者,或者可能更多地使用长期的方法-不要将所有添加的对象都作为与按钮位于同一层的子级。
所以代替:
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 layer
和button 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分层,因此在这种情况下无济于事。
我知道已经回答了这个问题,但是您也可以使用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,这也将导致闪烁,因为由于显示列表的工作方式,该按钮会短暂地从舞台上删除。
MovieClip在AS3 (reference)中没有名为'z'的属性”>
您应该阅读AS3的新display list模型。它应该可以帮助您了解如何将对象层叠在一起。
swapChildren()
这样无论您做什么,都将确保按钮是最重要的项目。在已添加的内容(在同一容器中)上调用addChild会将其读取到顶部。
MovieClip的“ z”属性用于Flash Player 10中的3D转换-相反,您需要显式设置MovieClip
的子索引