# Problem about depth

**URL:** https://forum.kirupa.com/t/problem-about-depth/247615
**Category:** Uncategorized
**Created:** [December 27, 2007, 8:11am UTC](https://forum.kirupa.com/t/problem-about-depth/247615 "2007-12-27T08:11:01Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![tiger\_1018](https://avatars.discourse-cdn.com/v4/letter/t/a9adbd/32.png) [@tiger\_1018](https://forum.kirupa.com/u/tiger_1018)
#### Post date: [December 27, 2007, 8:11am UTC](https://forum.kirupa.com/t/problem-about-depth/247615/1 "2007-12-27T08:11:01Z")

</div>

when I learned in as2.I used “swapdepth” to control the depth of object.but  
now I don’t know how in as3.Here is my code.What I want to do is to rotate  
the eight ball like 3d.  
package {  
import flash.display.Sprite;  
import flash.events.Event;  
import flash.events.MouseEvent;  
import mx.core.MovieClipAsset;  
import math.\*;  
public class myEmbed extends Sprite  
{  
[Embed(source=“assets/ball.swf”,symbol=“ball”)]  
private var Ball:Class;  
private var balls:Array;  
private var numBalls:Number=8;  
private var pointsArray:Array;  
private var myRotations:Object;  
private var screenPoints:Array;  
public function myEmbed()  
{

init();  
}  
private function init():void{  
pointsArray=[  
my3D.Make3DPoints(-50,-50,-50),  
my3D.Make3DPoints(50,-50,-50),  
my3D.Make3DPoints(50,-50,50),  
my3D.Make3DPoints(-50,-50,50),  
my3D.Make3DPoints(-50,50,-50),  
my3D.Make3DPoints(50,50,-50),  
my3D.Make3DPoints(50,50,50),  
my3D.Make3DPoints(-50,50,50)  
];  
myRotations=my3D.Make3DPoints(0,0,0);  
balls=new Array();  
for(var i:uint=0;i\<numBalls;i++){  
var ball:MovieClipAsset=new Ball();  
addChild(ball);  
ball.x=Math.random()_400;  
ball.y=Math.random()400;  
balls.push(ball);  
}  
addEventListener(Event.ENTER\_FRAME,onEnterFrame);  
}  
public function onEnterFrame(event:Event):void{  
myRotations.y-=.02  
myRotations.x+=.02  
screenPoints = my3D1.Transform3DPointsTo2DPoints(pointsArray, myRotations);  
for (var i:uint=0; i\<pointsArray.length; i++){  
var ball:MovieClipAsset=balls;  
ball.x = screenPoints_.x+100;  
ball.y = screenPoints\*.y+100;  
ball.scaleX = ball.scaleY = screenPoints\*.ratio;  
[SIZE=3]/_when i use this function .and run the project .it appear “RangeError: Error #2006: The supplied index is out of bounds”.and if remove it ,it looks wrong obviously.now i don’t how to change it_/ [/SIZE]  
setChildIndex(ball, screenPoints\*.depth);

} }}}  
Make3DPoints and Transform3DPointsTo2DPoints are my static function.here is code:  
package math{  
public class my3D{

public static function Make3DPoints(x:Number,y:Number,z:Number):Object{  
var point:Object=new Object();  
point.x=x;  
point.y=y;  
point.z=z;  
return point;  
}  
public static function make2DPoint(x:Number, y:Number, depth:Number, ratio:Number):Object{  
var point:Object = new Object();  
point.x = x;  
point.y = y;  
point.depth = depth;  
point.ratio = ratio;  
return point;  
}  
}  
}  
package math{  
public class my3D1{  
public static function Transform3DPointsTo2DPoints(points:Array,rotations :Object):Array{  
var d:Number=250;  
var myArray:Array=new Array();  
var sx:Number= Math.sin(rotations.x);  
var cx:Number= Math.cos(rotations.x);  
var sy:Number= Math.sin(rotations.y);  
var cy:Number = Math.cos(rotations.y);  
var sz:Number= Math.sin(rotations.z);  
var cz:Number= Math.cos(rotations.z);  
var i:uint = points.length;  
while (i–){  
var x:Number = points\*.x;  
var y:Number= points\*.y;  
var z:Number = points\*.z;  
var xy:Number = cx_y - sx_z;  
var xz:Number = sx_y + cx_z;  
var yz:Number = cy_xz - sy_x;  
var yx:Number = sy_xz + cy_x;  
var zx:Number = cz_yx - sz_xy;  
var zy:Number = sz_yx + cz_xy;  
var ratio:Number = d/(d + yz);  
x = zx_ratio;  
y= zy_ratio;  
z = yz;  
myArray\* = my3D.make2DPoint(x,y,-z,ratio);  
}  
return myArray;

}  
}  
}
