《Making Things Move》hitTestObject碰撞检测

该实例来源于《Making Things Move》一书,对于对象碰撞检测hitTestObject方法使用简单,不过对于不规则形状就显示“错误的碰撞“,所以对于矩形来说,hitTestObject检测碰撞的结果很好,(让我联想到俄罗斯方块的设计了),另外,你也可以尝试绘制出你喜欢的图形来看看效果!

代码如下:

NewGraphic.as

package org.luosijin.hit   
{   
    import flash.display.Sprite;   
       
    public class NewGraphic extends Sprite   
    {   
        private var _w:Number;  //定义矩形宽度   
        private var _h:Number;  //定义矩形高度    
        private var _unit:uint  //定义矩形颜色   
           
        public var vx:Number=0; //定义矩形X轴速度   
        public var vy:Number=0; //定义矩形Y轴速度   
  
        public function NewGraphic(width:Number=50,height:Number=50,color:uint=0xff0000)   
        {   
            this._w = width;   
            this._h = height;   
            this._unit = color;   
            init();   
        }   
        public function init():void  
        {   
            graphics.beginFill(_unit);    
            graphics.drawRect(_w/2,_h/2,_w,_h);   
            graphics.endFill();   
        }   
    }   
}  
package org.luosijin.hit
{
 import flash.display.Sprite;
 
 public class NewGraphic extends Sprite
 {
  private var _w:Number; //定义矩形宽度
  private var _h:Number; //定义矩形高度 
  private var _unit:uint //定义矩形颜色
  
  public var vx:Number=0; //定义矩形X轴速度
  public var vy:Number=0; //定义矩形Y轴速度

  public function NewGraphic(width:Number=50,height:Number=50,color:uint=0xff0000)
  {
   this._w = width;
   this._h = height;
   this._unit = color;
   init();
  }
  public function init():void
  {
   graphics.beginFill(_unit); 
   graphics.drawRect(_w/2,_h/2,_w,_h);
   graphics.endFill();
  }
 }
}

 
Graphics.as

package org.luosijin.hit   
{   
    import flash.display.Sprite;   
    import flash.events.Event;   
    import flash.utils.Timer;   
       
    public class Graphics extends Sprite   
    {   
        private var _graphic:NewGraphic;   
        private var _graphices:Array;   
        private var _gravity:Number = 0.3;   
        public function Graphics():void  
        {   
            init();   
        }   
        private function init():void  
        {   
            _graphices = new Array();   
            createGraphic();   
            addEventListener(Event.ENTER_FRAME,onEnterFrame);   
        }   
           
        private function createGraphic():void  
        {   
            if(_graphices.length>80)   
            {   
                removeEventListener(Event.ENTER_FRAME,onEnterFrame);   
            }   
            //随机初始化宽高与颜色    
            _graphic = new NewGraphic(Math.random()*40+10,Math.random()*40+10,Math.random()*0XFFFFFF);   
            _graphic.x = Math.random()*stage.stageWidth;    //随机初始化图形的x位置   
            addChild(_graphic);   
            _graphices.push(_graphic);   
        }   
        private function onEnterFrame(event:Event):void  
        {   
            //重力加速放到图形的y轴上    
            _graphic.vy += _gravity;   
            _graphic.y += _graphic.vy;   
            //判断是否到达屏幕底部   
            if(_graphic.y+_graphic.height/2>stage.stageHeight)   
            {   
                _graphic.y = stage.stageHeight-_graphic.height/2;   
                createGraphic();   
            }   
            //循环判断是否碰撞到其中一个图形   
            for(var i:int=0;i<_graphices.length;i++)   
            {   
                if(_graphic!=_graphices[i]&&_graphic.hitTestObject(_graphices[i]))//确定图形是否与 显示图形的边框重叠或相交。      
                {   
                        _graphic.y = _graphices[i].y-_graphices[i].height/2-_graphic.height/2;   
                        createGraphic();   
                }   
            }   
  
        }   
    }   
}  

你可能感兴趣的:(Flash)