《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(); } } }

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(); } } } } }

你可能感兴趣的:(Flex每天一实例)