zoukankan      html  css  js  c++  java
  • AS 3.0学习笔记

    最近学习 as3.0,虽然 感觉不如Silverlight 好使,但是有些方面还是不错的,各有各优点吧。但是今天 学习遇到了个问题,从书上面照到打的一段代码运行无果,没有任何效果,最后拷贝代码下来运行也是这样,试了好久,找到原因,就是因为把stage.scaleMode 设成了 NoScale .猜想原因是初始化的时候他的舞台效果只能够定义一次吧,整个程序就只有两个类,像在一个棋盘上面画围棋,下面这个是ball类

    package
    {
    import flash.display.Sprite;
    public class Ball  extends Sprite
    {
    private var _Color:uint;
    private var _Radius:Number;
    private  var _vx:Number=0;
       private var _vy:Number=0;
    public function Ball(radius:Number,color:uint=0xffffff)
    {
    this._Radius=radius;
    this._Color=color;
    }

    private function Draw():void
    {


    this.graphics.lineStyle(0);
    this.graphics.beginFill(0xcccccc);
    this.graphics.drawCircle(0,0,radius);
    this.graphics.endFill();




    }

    public function Update():void
    {
    x+=this._vx;
    y+=this._vy;


    }

    public function set Color(value:uint):void
    {
    this._Color=value;
    Draw();
    }

    public function get Color():uint
    {
    return this._Color;
    }

    public function get radius():Number
    {
    return this._Radius;
    }

    public function set VX(value:Number):void
    {
    this._vx=value;
    }

    public function get VX():Number
    {
    return this._vx;
    }

    public function set VY(value:Number):void
    {
    this._vy=value;
    }

    public function get VY():Number
    {
    return this._vy;
    }

    }
    }

     下面这个类是  主程序:

    package
    {
    	import flash.display.Sprite;
    	import flash.display.StageAlign;
    	import flash.display.StageScaleMode;
    	public class TEST4 extends Sprite
    	{
    		private const GRID_SIZE: Number = 50;
    		private const RADIUS: Number = 25;
    		private var _balls: Array;
    		private var _grid: Array;
    		private var _numBalls: int = 100;
    		private var _numChecks: int = 0;
    		public function TEST4()
    		{
    			 stage.align = StageAlign.TOP_LEFT;
    			 stage.scaleMode = StageScaleMode.SHOW_ALL;
    		
    			 
    			 
    		   
    			 
    			makeBalls();
    			makeGrid();
    			drawGrid();
    			assignBallsToGrid();
    			checkGrid();
    	 
    		}
    		// 剩余的函数等下一一介绍
    		
    		private function makeBalls(): void
    		{
    			_balls = new Array();
    			for(var i: int=0; i < _numBalls; i++)
    			{
    				// 创建出一个球,然后把它加入显示列表以及数组
    				var ball: Ball = new Ball(RADIUS);
    				ball.x = Math.random() * stage.stageWidth;
    				ball.y = Math.random() * stage.stageHeight;
    				addChild(ball);
    				_balls.push(ball);
    			}
    		}
    		private function makeGrid(): void
    		{
    			_grid = new Array();
    			// 场景宽度 / 格子大小 = 网格列数
    			
    			for(var i: int=0; i < stage.stageWidth / GRID_SIZE; i++)
    			{
    				_grid[ i ] = new Array();
    				// 场景高度 / 格子大小 = 网格行数
    				for(var j: int=0; j < stage.stageHeight / GRID_SIZE; j++)
    				{
    					_grid[ i ][j] = new Array();
    				}
    			}
    		}
    		private function drawGrid(): void
    		{
    			// 画出行列线
    			graphics.lineStyle(0, .5);
    			for(var i: int=0; i <= stage.stageWidth; i+=GRID_SIZE)
    			{
    				graphics.moveTo(i, 0);
    				graphics.lineTo(i, stage.stageHeight);
    				
    				trace(this.stage.stageWidth);
    			}
    			for(i=0; i <= stage.stageHeight; i+=GRID_SIZE)
    			{
    				graphics.moveTo(0, i);
    				graphics.lineTo(stage.stageWidth, i);
    			}
    			
    			 
    		}
    		private function assignBallsToGrid(): void
    		{
    			for(var i: int=0; i < _numBalls; i++)
    			{
    				// 球的位置除以格子大小,得到该球所在网格的行列数
    				var ball: Ball = _balls[ i ] as Ball;
    				var xpos: int = Math.floor(ball.x / GRID_SIZE);
    				var ypos: int = Math.floor(ball.y / GRID_SIZE);
    				(_grid[ xpos ][ ypos ] as Array).push(ball);
    			}
    		}
    		private function checkGrid(): void
    		{
    			for(var i: int=0; i < _grid.length; i++)
    			{
    				for(var j: int=0; j < _grid[ i ].length; j++)
    				{
    					// 检测第一个格子内的对象间是否发生碰撞
    					checkOneCell(i, j);
    					checkTwoCells(i, j, i+1, j); // 右边的格子
    					checkTwoCells(i, j, i-1, j+1); // 左下角的格子
    					checkTwoCells(i, j, i, j+1); // 下边的格子
    					checkTwoCells(i, j, i+1, j+1); // 右下角的格子
    				}
    			}
    		}
    		private function checkOneCell(x: int, y: int): void
    		{
    			// 检测当前格子内所有的对象
    			var cell:Array = _grid[ x ][ y ] as Array;
    			for(var i: int=0; i < cell.length-1; i++)
    			{
    				var ballA: Ball = cell[ i ] as Ball;
    				for(var j: int=i+1; j < cell.length; j++)
    				{
    					var ballB: Ball = cell[ j ] as Ball;
    					checkCollision(ballA, ballB);
    				}
    			}
    		}
    		
    		private function checkTwoCells(x1: int, y1: int, x2: int, y2: int): void
    		{
    			// 确保要检测的格子存在
    			if(x2 < 0) return;
    			if(x2 >= _grid.length) return;
    			if(y2 >= _grid[ x2 ].length) return;
    			var cell0:Array = _grid[ x1 ][ y1 ] as Array;
    			var cell1:Array = _grid[ x2 ][ y2 ] as Array;
    			// 检测当前格子和邻接格子内所有的对象
    			for(var i: int=0; i < cell0.length; i++)
    			{
    				var ballA: Ball = cell0[ i ] as Ball;
    				for(var j: int=0; j < cell1.length; j++)
    				{
    					var ballB: Ball = cell1[ j ] as Ball;
    					checkCollision(ballA, ballB);
    				}
    			}
    		}
    		
    		private function checkCollision(ballA: Ball, ballB: Ball):void
    		{
    			// 判断距离的碰撞检测
    			_numChecks++;
    			var dx: Number = ballB.x - ballA.x;
    			var dy: Number = ballB.y - ballA.y;
    			var dist: Number = Math.sqrt(dx * dx + dy * dy);
    			if(dist < ballA.radius + ballB.radius)
    			{
    				ballA.color = 0xff0000;
    				ballB.color = 0xff0000;
    			}
    		}
    	}
    }
    
    
    

     这是好的。但是在构造函数里面,如果把 stage.scaleMode = StageScaleMode.SHOW_ALL;高成NoScale,就会有问题,只显示一个小球的一部分。

  • 相关阅读:
    牛儿
    Tarjan算法
    There&nbsp;is&nbsp;no&nbsp;resul…
    Struts2+JQuery+Json登陆实例
    struts2+jquery+easyui+datagrid+j…
    Spring:JdbcTemplate使用指南
    使用Spring的jdbcTemplate进一步简…
    JDBC连接MySQL数据库及示例
    PLSQL导入/导出数据方法
    PLSQ创建用户L
  • 原文地址:https://www.cnblogs.com/fat_li/p/2734274.html
Copyright © 2011-2022 走看看