`
sjpsega
  • 浏览: 300405 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

碰撞测试小节

 
阅读更多


    在最近的项目中,需要用到碰撞测试的知识,故特意去看了《as动画基础》、《as高级动画》,并看了网上的帖子,小有斩获。

对象与对象的碰撞测试,主要使用三种方法:

1.

DisplayObject.hitTestObject(obj:DisplayObject)
该方法的测试效率最高,但精确度最低,只对矩形物体有效,不规则物体的碰撞测试,这个方法无能为力。

 

2.

BitmapData.hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
该方法是《as高级动画》上介绍的,通常的做法是定义2个BitmapData对象bmpd1和bmpd2,
分别为new BitmapData(stage.stageWidth, stage.stageHeight, true, 0),bmpd1.draw(obj1, obj2.transform.matrix);bmpd2.draw(obj1, obj2.transform.matrix);
isHit = bmpd1.hitTest(new Point(), 255, bmpd2, new Point(), 255);进行碰撞测试。

 

 3.
BitmapData.getColorBoundsRect(mask:uint, color:uint, findColor:Boolean = true):Rectangle 
该方法非常巧妙,需要定义1个BitmapData对象,draw的时候:bmpd.draw(obj1, obj1.transform.matrix, new ColorTransform(1, 1, 1, 1, 255, -255, -255, 255)),将bmpd1绘制成红色;
之后,继续在bmpd上绘制,bmpd.draw(obj2, obj2.transform.matrix, new ColorTransform(1, 1, 1, 1, -255, 255, 255, 255), BlendMode.DIFFERENCE),采用青色绘制,并且采用"difference"的混合模式;
这样绘制后,若有重叠,重叠色为白色。之后采用var rect:Rectangle = bmpd1.getColorBoundsRect(0xFFFFFFFF, 0xFFFFFFFF, true);若rect.width>1,便可确认是否碰撞。
 
  这三种方法需要分情况使用,若测试的对象为矩形,使用方法1最合适,效率最高;若测试的对象为不规则图形,可使用方法2或方法3.

之后介绍两种网上高手写的碰撞测试方法,这两种方法均是对上面第三种方法的延伸、扩展。
1.
HitTest.complexHitTestObject(target1:DisplayObject, target2:DisplayObject, accurracy:Number = 1):Boolean 
这是tink写的一个像素级碰撞检测类,做了良好的封装,使用简单。
最上面方法3的优化主要在于,BitmapData对象的消耗主要在创建BitmapData对象的大小上,越大消耗越大,tink写的方法,首先先计算了两个物体的矩形所占位置的重叠部分,BitmapData只新建大小为该重叠部分的大小,故消耗大大减小。
 2.
BitmapHitTestPlus.complexHitTestObject(target1:DisplayObject, target2:DisplayObject)
这是Aone在tink的HitTest的基础上优化效率后的碰撞检测,整体思路是一样的,效率优化时在计算两个物体矩形重叠部分上更进一步。采用分块的思路分别计算,见效计算量。但是,经我实际使用和测试,该方法虽然比tink的方法效率高,但是精确度不够,需要改进,或根据情况使用。
 
我的代码间附件。在写这篇帖子之前,看到leng6666写了一片类似的帖子 谈谈碰撞测试(上),他写的比我详细,可以相互借鉴。
水平有限,有不足的地方也希望大家帮我指出!

ps:javaeye的编辑器真不爽……
分享到:
评论

相关推荐

    asp.net资料小节

    MVC模式则更侧重于分离关注点,使代码更加可测试和可维护。 3. **界面元素处理** 在ASP.NET中,我们可以使用服务器控件来构建用户界面。这些控件如Button、TextBox、Label等,具有内置的事件处理和状态管理功能。...

    成大事者应拘小节辩论材料.docx

    成大事者应拘小节辩论材料.docx

    架构师教程 多个小节

    教程分为多个小节,每个小节专注于一个特定的主题,以便于理解和吸收。以下是对各小节主要内容的详细介绍: 1. **架构师的角色与职责**:在这个章节,我们将讨论架构师在软件开发过程中的核心职责,包括技术领导、...

    flex 小节.rar

    这些都是我从2010年到2015年 flex工作经验小节。如远程对象的配置, flex 默认右键 菜单的屏蔽, datagrid 的渲染器, 编辑器。 tip 提示的重写。 Menu 的默认样式改写, 比如把分割线变细,flex 组件的生命周期,...

    《人口增长模式及地区分布》小节测试题[收集].pdf

    "《人口增长模式及地区分布》小节测试题[收集].pdf" 这篇测试题涵盖了人口增长模式、地区分布、人口年龄结构、人口增长率、人口老龄化等多个方面的知识点。 首先,测试题中提到了人口增长模式的分类,包括传统型、...

    58小节网络营销.pptx

    58小节网络营销.pptx

    tian工作报告小节3.pdf

    tian工作报告小节3.pdf

    软件测试超市进销存管理系统与测试.doc

    2.2 需求分析任务:在这一小节中,我们将讨论软件测试超市进销存管理系统的需求分析任务,包括需求收集、需求分析和需求规范等内容。 2.3 用况分析:在这一小节中,我们将讨论软件测试超市进销存管理系统的用况分析...

    系统规划师第一小节 信息系统

    系统规划师第一小节 信息系统

    第二讲面对对象第四小节

    在本讲中,我们将深入探讨C#编程语言中的面向对象特性。C#,全称CSharp,是由微软公司推出的、用于构建Windows平台上的应用程序的现代编程语言。它以其强大的面向对象编程能力,丰富的库支持以及与.NET框架的紧密...

    第三讲第六小节

    在本节教程“第三讲第六小节”中,我们将深入探讨C#编程语言的一些关键概念。C#(读作"C sharp")是由微软公司开发的一种面向对象的编程语言,广泛应用于构建Windows桌面应用、Web应用以及游戏开发等领域,尤其是与...

    02-各小节说明与总结.pdf

    02-各小节说明与总结.pdf

    red hat linux 虚拟机连接上网小节

    对虚拟机中linux连接上网的问题个人进行了小节,

    初中语文文摘历史行正道何必拘小节

    初中语文文摘历史行正道何必拘小节

    Struts2.16 标签小节

    这篇博客主要讨论的是Struts2中的标签小节,下面我们将深入探讨这一主题。 首先,Struts2的标签库是基于JSP标准标签库(JSTL)的,它扩展了JSP的功能,使得在页面中处理业务逻辑和展示数据变得更加简单。这些标签...

    ssh第二小节总结

    ### SSH 第二小节知识点总结 #### 一、表空间概念与分类 ##### 定义 - **表空间**:数据库逻辑结构中的一个重要概念,它用于存放各种应用对象(如表、索引等)。每个表空间由一个或多个数据文件组成。 ##### 目的...

    net开发小节:权限管理.zip_快速开发框架

    总的来说,"net开发小节:权限管理.zip_快速开发框架"中的内容可能涵盖从理论到实践的各个层面,包括设计、实现、测试和优化权限管理系统,这对于提升.NET开发者的技能和理解快速开发框架的能力大有裨益。...

    metronome-measure:添加到节拍器项目 - 添加小节计数器

    本项目"metronome-measure"是一个JavaScript实现的节拍器,旨在提供一个带有小节计数功能的增强版节拍器,特别适合于跟踪如12小节布鲁斯这样的重复结构,避免在即兴演奏时失去节奏感。 首先,我们需要理解...

Global site tag (gtag.js) - Google Analytics