flash 3d基础学习2

随机创建多个对象

上一篇做了一绕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;
	}
}
原文地址:https://www.cnblogs.com/riaol/p/2382375.html