随机创建多个对象
上一篇做了一绕z轴坐标旋转的正方体,这一篇随机创建1000个点,并进行尝试排序以及向屏幕移动。当z坐标小于0时移除对象。
package { import flash.display.Sprite; import flash.events.Event; /** * @author:Gaara * 2012-3-5 * **/ [SWF(width="800", height="600" ,frameRate="12", backgroundColor="#000000")] public class TestCos extends Sprite { /** 绘制小球 **/ private var ballVec:Array = new Array; /**观察者与屏幕距离 **/ private var D:Number = 1000; /**旋转角度 **/ private var angelT:Number = 0.001; /** 弧度 **/ private var radian:Number = angelT * 180 /Math.PI; /** 消失点 **/ private var vpX:Number = 0; private var vpY:Number = 0; public function TestCos() { /* this.x = stage.stageWidth / 2; this.y = stage.stageHeight / 2;*/ for (var i:int = 0; i < 1000; i++) { var ball:Ball = new Ball(Math.random()*100000% stage.stageWidth,Math.random()*100000% stage.stageHeight,Math.random()*1000); addChild(ball); ballVec.push(ball); } ballVec.sortOn("_z",Array.DESCENDING | Array.NUMERIC); for (var j:int = 0; j < ballVec.length; j++) { var ball2:Ball = ballVec[j]; setChildIndex(ball2,j); } this.addEventListener(Event.ENTER_FRAME,onAdd); } protected function onAdd(event:Event):void { for (var i:int = 0; i < ballVec.length; i++) { var ball:Ball = ballVec[i]; /* var _x:Number = ball._x*Math.cos(radian) - ball._y*Math.sin(radian); var _y:Number = ball._y*Math.cos(radian) + ball._x*Math.sin(radian); ball._x = _x ; ball._y = _y ;*/ ball._z -= 5; var myRadio:Number = D/(D + ball._z); if(ball._z <= 0){ ballVec.splice(i,1); removeChild(ball); } else{ var pX:Number = (ball._x - vpX) * myRadio; var pY:Number = (ball._y - vpY) * myRadio; ball.x = vpX + pX; ball.y = vpY + pY; trace("myRadio:" + myRadio+" px:" + pX +" py:" + pY); ball.scaleX = ball.scaleY = myRadio; ball.alpha = 100 * myRadio; } } } } }
下午把球换成树
package { import flash.display.Sprite; /** * @author:Gaara * 2012-3-6 * **/ public class Tree extends Sprite { public function Tree(x:Number,y:Number,z:Number) { this._x = x; this._y = y; this._z = z; graphics.lineStyle(0, 0xffffff); graphics.lineTo(0, -140 - Math.random() * 20); graphics.moveTo(0, -30 - Math.random() * 30); graphics.lineTo(Math.random() * 80 - 40,-100 - Math.random() * 40); graphics.moveTo(0, -60 - Math.random() * 40); graphics.lineTo(Math.random() * 60 - 30,-110 - Math.random() * 20); } public var _x:Number; public var _y:Number; public var _z:Number; } }