随机创建多个对象
上一篇做了一绕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;
}
}