网站大量收购闲置独家精品文档,联系QQ:2885784924

ActionScript3.0碰撞检测技术研究.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ActionScript3.0碰撞检测技术研究

ActionScript3.0碰撞检测技术研究摘要:本文介绍了ActionScript3.0语言关于碰撞检测的各种方法和手段,结合FLASH开发工具实现了各种碰撞常用算法,分析常用方法的缺点和优点,并根据不同的碰撞要求总结合理的碰撞解决方案。 关键词:Flash;ActionScript3.0;碰撞检测 中图分类号:TP311.52 文献标识码:A文章编号:1007-9599(2012)05-0000-02 在开发基于ActionScript3的FLASH游戏和RIA应用程序的过程中,经常会用到碰撞检测技术,选用适当的碰撞检测方法是优化Flash游戏和RIA应用程序中至关重要的环节。当前,网页游戏十分盛行,小巧的游戏容量,精美的游戏画面,吸引着众多的玩家。随着游戏的规模越来越大,游戏玩家对游戏的精细程度要求越来越高,在满足用户对游戏效果要求的同时难免会降低网页游戏的运行速度,尽管ADOBE公司的FLASH已经支持了硬件加速等技术来优化游戏和视频的运行,但是速度仍然是FLASH网页游戏的一个瓶颈,而影响游戏速度的一个重要因素就是碰撞检测的复杂度。 AS3开发游戏及RIA应用程序常用的碰撞检测方法包括:地图网格检测、矩形检测、圆形检测、像素级位图检测四种方法。 一、地图网格检测 地图网格检测是比较粗糙的矩形检测,将固定尺寸的矩形作为一个整体单元进行处理,将整张地图划分为若干行列有序的矩形区域,在地图上移动的对象必须满足尺寸是矩形网格的整数倍,每次移动至少是矩形网格的整数倍,这样通过检测2个对象的网格坐标是否相邻就可以判断是否发生碰撞,实现这种碰撞需要对地图中出现的对象内存储自身的网格坐标,例如某对象内部存储了自身的网格坐标为(3,2)代表第3行第2个格子,该对象和其它对象发生碰撞仅需要检测另一个对象的坐标是不是(3,1)、(3,3)、(2,2)、(4,2)即可。这种方式常运用在移动对象尺寸较固定的简单游戏中,例如俄罗斯方块、推箱子等。 二、矩形检测 矩形检测是最常用的检测碰撞,实现矩形检测可以通过DisplayObject对象内的Rectangle对象的位置进行判断,也可以直接调用hitTestObject ()方法来实现。 (一)使用DisplayObject的Rectangle对象来判断碰撞就是要检测两个矩形是否重叠。假设对象A的Rectangle左上角的坐标是(x1,y1),宽度是w1,高度是h1;对象B的Rectangle左上角的坐标是(x2,y2),宽度是w2,高度是h2。只需要比较2个Rectangle矩形中心点在X,Y方向的分量距离,满足 x方向:| (x1 + w1 / 2) ? (x2 + w2/2) | |(w1 + w2) / 2| y方向:| (y1 + h1 / 2) ? (y2 + h2/2) | |(h1 + h2) / 2| 则Rectangle矩形发生了重叠即碰撞。 (二)使用hitTestObject()方法仅需要将带入另一个DisplayObject对象参数即可判断矩形是否碰撞。例如displayobject1.hitTextObject(displayobject2),其中displayobject1和displayobject2为DisplayObject子类对象 三、圆形检测 如果我们将近似矩形的对象都认为是矩形对象,使用矩形检测碰撞,则我们将近似圆的对象使用圆形碰撞检测。圆形碰撞的基本思路是计算两个圆心之间的距离是否小于两个圆的半径和。假设圆形A的左上角坐标是(x1,y1),半径是r1,圆形B的左上角的坐标是(x2,y2),半径是r2,判断2个圆形对象实现碰撞公式为: (x1 ? x2)2 + (y1 ? y2) 2 (r1 + r2) 2 四、基于像素级碰撞检测 (一)当只需要检测某一个对象和某一个像素点坐标是否碰撞,可以使用DisplayObject对象的hitTestPoint()方法,例如: circle.hitTestPoint(point1.x, point1.y, true),其中circle是一个绘制了一个圆的DisplayObject子类对象,point1为坐标点Point类对象,x,y为坐标point1的横纵坐标,最后一个参数设置为true是为了检查对象的实际像素,而不是检测圆的外接矩形边框区域像素。这种方法多用在检测鼠标是否位于一个特定对象之上或者是一个不规则的形状与另一个点的碰撞检测,但是无法实现2个不规则形状的碰撞检测。 (二)借助BitmapData类和Bitmap类可以实现带有透明效果的位图图像的碰撞检测。BitmapData类中包

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档