• 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;
    	}
    }
    
  • 相关阅读:
    @ControllerAdvice 全局异常处理
    SpringBoot 单文件和多文件上传
    Springboot application 本地HTTPS配置
    不使用spring-boot-starter-parent进行依赖的版本管理
    构造函数和函数式接口
    函数式接口和Lambda表达式
    使用FunctionalInterface提供工厂方法
    Future 和 CompletableFuture 异步任务 in Java
    单例
    使用私有仓库(Docker Registry 2.0)管理镜像
  • 原文地址:https://www.cnblogs.com/riaol/p/2382375.html
Copyright © 2020-2023  润新知