ActionScript3[1]0碰撞检测集合(基础版).docx
上传人:sy****28 上传时间:2024-09-13 格式:DOCX 页数:8 大小:38KB 金币:14 举报 版权申诉
预览加载中,请您耐心等待几秒...

ActionScript3[1]0碰撞检测集合(基础版).docx

ActionScript3[1]0碰撞检测集合(基础版).docx

预览

在线预览结束,喜欢就下载吧,查找使用更方便

14 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

ActionScript3.0中的碰撞检测和思考(基础版)前言:碰撞检测是游戏开发和RIA开发中必不可少的一块内容。尤其是在游戏中,碰撞检测显得尤为重要。首先,我们来考虑一个简单的模型。矩形之间的碰撞检测矩形之间的碰撞检测在游戏中是比较简单的一种碰撞形式,在ActionScript3.0中,显示对象中提供了一种比较好的办法来检测两个矩形之间的物体之间的位置关系。那就是hitTestObject()。HYPERLINK"mk:@MSITStore:E:\\常用的一些小东西\\Flex.3.Language.CHM::/flash/display/DisplayObject.html"\l"hitTestObject()"hitTestObject(obj:HYPERLINK"mk:@MSITStore:E:\\常用的一些小东西\\Flex.3.Language.CHM::/flash/display/DisplayObject.html"DisplayObject):HYPERLINK"mk:@MSITStore:E:\\常用的一些小东西\\Flex.3.Language.CHM::/Boolean.html"Boolean计算显示对象,以确定它是否与obj显示对象重叠或相交。我们可以来看下面的一个简单的测试,新建两个矩形矢量图,然后使得一个矩形跟随鼠标移动,另外一个矩形在指定位置不移动。然后我们移动鼠标,在控制台会显示当前他们之间的位置关系。下面为关键代码:privatevars:Sprite=newSprite();privatevars1:Sprite=newSprite();Mouse.hide();s.x=100;s.y=100;s.graphics.beginFill(0xff0000);s.graphics.drawRect(0,0,30,30);stage.addChild(s);s1.x=200;s1.y=200;s1.graphics.beginFill(0xff0000);s1.graphics.drawRect(0,0,30,30);stage.addChild(s1);stage.addEventListener(MouseEvent.MOUSE_MOVE,move);privatefunctionmove(e:MouseEvent):void{s1.x=e.stageX;s1.y=e.stageY;trace(s1.hitTestObject(s));}这种方式能够获得两个显示对象之间是否发生重叠或者相交。理论上来说,他能够适用于所有的显示对象,但是实际上,他的作用也最为”微弱”。为什么这么说呢?在ActionScript3.0中,虽说所有的显示对象在添加到显示列表中之后都会呈现为一个矩形区域,但是,我们游戏中的图像资源并不可能一定都是矩形的(主要体现为没有像素的区域会被我们在显示图像的时候刻意的进行隐藏,但是本质上,这个不规则的图像在FlashPlay中所占的位置还是一个矩形区域)。所以在我们做一些非矩形图形之间的碰撞检测的时候,这个方法就作用就并不能满足我们的需要了。圆形矢量图之间的碰撞检测考虑下面一个模型,如果将前面两个矩形改成圆,然后再去执行同样的操作,你会发现,误差开始出现了。如下图:实际:碰撞了表观:未碰撞很显然这个是我们无法避免的问题,那么我们如何正确判断两个矢量圆之间是否发生碰撞了呢?方法1:我们可以获取两个圆的圆心位置,并计算出两个圆心位置的距离,然后分别和两个圆的半径进行比较(主要是考虑到两个圆的大小可能不一致)。如果计算出来的值小于了两个圆半径的和,那么表示这两个圆发生了碰撞。如图<1>。否则则表示两个圆之间并没有发生碰撞。如图<2>。图<1>图<2>这个方法确实不失为一个简单有效的方法,而且实现起来并不算难。但是除了这个方法之外还会有其他的方法吗?答案是肯定的。方法2:我们还可以使用位图中的hitTest()方法来实现检测。HYPERLINK"mk:@MSITStore:E:\\常用的一些小东西\\Flex.3.Language.CHM::/flash/display/BitmapData.html"\l"hitTest()"hitTest(firstPoint:HYPERLINK"mk:@MSITStore:E:\\常用的一些小东西\\Flex.3.Language.CHM::/flash/geom/Point.html"Point,firstAlphaThreshold:HYPERLINK"mk:@MSITSt