在3D空间坐标系中,除了x和y轴,还有一个z轴。与笛卡尔坐标不同,Flash坐标系中原点在舞台的左上角,x轴从左到右逐渐增大,y轴从上到下逐渐增大,而z值是远离我们变大,接近我们递减,也就是离我们远的对象,z值大,反之则小。
Flash 3D]可以处理显示对象的透视效果,即同样的显示对象,z值大的就会变小,z值越大对象越小,直至消失在屏幕上。
当屏幕上有许多物体时,如果这些物体的z值不同,那么它们和我们的距离就会不同。我们知道距离我们近的物体应该在远的物体的前面,也就是说近处的物体应该会遮盖或部分遮盖远的物体。这应该是正确的深度排序。
如果我们仅仅使用addChild()方法把对象添加到显示列表,Flash Player不能总是采用正确的深度排序方法,会出现后面的物体却挡住前面的物体。也就是说Flash Player没有现成的属性和方法来实现深度排序,需要我们自定义深度排序。
实例中我们导入了一个png图片,转化为MovieClip类导出为Person子类。使用for循环创建30实例,并push进数组,使用数组的sortOn()方法来实现数组的降序排列。在使用for循环实现正确的深度排序。
//http://www.flashabc.net
import flash.display.MovieClip;
var persons:<a href=http://www.flashabc.net/catalog.asp?tags=Array>Array</a>=new Array()
for (var i:int=0; i<30; i++)
{
var person:Person=new Person();
addChild(person);
person.x = <a href=http://www.flashabc.net/catalog.asp?tags=Math>Math</a>.random() * stage.stageWidth;
person.y = stage.stageHeight-100 ;
person.z = Math.random() *8000;
persons.push(person)
}
persons.sortOn("z",Array.NUMERIC|Array.DESCENDING)
for (var j:int=0; j<30; j++){
addChild(persons[j] as MovieClip)
}