AS3:如何控制哪个 MovieClip 显示在哪个之上
AS3: How to control which MovieClip is displayed over which
我正在制作一款游戏,其中一些敌人在屏幕右侧生成,然后向屏幕左侧移动。为了获得一点变化,敌人在 y 轴上的随机生成略有不同。
问题:
所以我知道,最后添加的 MovieClip 显示在其他 MovieClip 之上。但我需要一种方法,以便无论何时添加,y 轴较低的 MovieClip 始终显示在 y 轴较高的 MovieClip 之上。
原因是否则它会扰乱游戏中的水平错觉,因为 y 轴上较高的 MovieClip 看起来应该比 y 轴上较低的 MovieClip 看起来更远。
我希望我说得有道理。提前致谢!
您需要根据 y
位置对它们进行排序,然后根据排序顺序在父级中设置它们的索引:
此函数将获取 container/parent 的所有子项,并根据 y
的位置对它们进行排序。
function sortAllZ(container:DisplayObjectContainer):void {
//build an array of all the objects:
var list:Vector.<DisplayObject> = new Vector.<DisplayObject>();
var i:int = container.numChildren;
while(i--){
list.push(container.getChildAt(i));
}
list.sort(sortZ);
for(var i:int=0;i<list.length;i++){
container.addChild(list[i]);
}
}
function sortZ(a:DisplayObject, b:DisplayObject):Number {
return a.y - b.y;
}
由于您可能每帧都运行此代码(假设您的对象的 y 位置随时间变化),因此保留所有对象的 array/vector 会更有效你想要排序。 (而不是每次要排序时都重新创建一个新的)。如果是这样,你可以这样做:
//where list is your vector/array, and container is the parent of items
function sortAll(){
//sort the vector/array using the custom sort method defined below
list.sort(sortZ);
//now loop through that array and add the children in that order
for(var i:int=0;i<list.length;i++){
container.addChild(list[i]);
}
}
//if you are using an array and not a vector, take out the :DisplayObject type declarations
function sortZ(a:DisplayObject, b:DisplayObject):Number {
return a.y - b.y;
}
我正在制作一款游戏,其中一些敌人在屏幕右侧生成,然后向屏幕左侧移动。为了获得一点变化,敌人在 y 轴上的随机生成略有不同。
问题: 所以我知道,最后添加的 MovieClip 显示在其他 MovieClip 之上。但我需要一种方法,以便无论何时添加,y 轴较低的 MovieClip 始终显示在 y 轴较高的 MovieClip 之上。 原因是否则它会扰乱游戏中的水平错觉,因为 y 轴上较高的 MovieClip 看起来应该比 y 轴上较低的 MovieClip 看起来更远。
我希望我说得有道理。提前致谢!
您需要根据 y
位置对它们进行排序,然后根据排序顺序在父级中设置它们的索引:
此函数将获取 container/parent 的所有子项,并根据 y
的位置对它们进行排序。
function sortAllZ(container:DisplayObjectContainer):void {
//build an array of all the objects:
var list:Vector.<DisplayObject> = new Vector.<DisplayObject>();
var i:int = container.numChildren;
while(i--){
list.push(container.getChildAt(i));
}
list.sort(sortZ);
for(var i:int=0;i<list.length;i++){
container.addChild(list[i]);
}
}
function sortZ(a:DisplayObject, b:DisplayObject):Number {
return a.y - b.y;
}
由于您可能每帧都运行此代码(假设您的对象的 y 位置随时间变化),因此保留所有对象的 array/vector 会更有效你想要排序。 (而不是每次要排序时都重新创建一个新的)。如果是这样,你可以这样做:
//where list is your vector/array, and container is the parent of items
function sortAll(){
//sort the vector/array using the custom sort method defined below
list.sort(sortZ);
//now loop through that array and add the children in that order
for(var i:int=0;i<list.length;i++){
container.addChild(list[i]);
}
}
//if you are using an array and not a vector, take out the :DisplayObject type declarations
function sortZ(a:DisplayObject, b:DisplayObject):Number {
return a.y - b.y;
}