- 浏览: 1088566 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://bbs.9ria.com/thread-1270-1-1.html
之前,在坛里看到过有朋友贴过不规则物体碰撞检测的类,这里,我再贴个一位牛老外写的一个类,经自己测试,用一个1500*1500的矢量图和一个10*10的不短移动的小球进行碰状检测,CPU占用仅4%左右,超级高效!!!
这里是代码:
Actionscript:
之前,在坛里看到过有朋友贴过不规则物体碰撞检测的类,这里,我再贴个一位牛老外写的一个类,经自己测试,用一个1500*1500的矢量图和一个10*10的不短移动的小球进行碰状检测,CPU占用仅4%左右,超级高效!!!
这里是代码:
Actionscript:
package ws.tink.display { import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.DisplayObject; import flash.display.Sprite; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; public class HitTest { public static function complexHitTestObject( target1:DisplayObject, target2:DisplayObject, accurracy:Number = 1 ):Boolean { return complexIntersectionRectangle( target1, target2, accurracy ).width != 0; } public static function intersectionRectangle( target1:DisplayObject, target2:DisplayObject ):Rectangle { // If either of the items don't have a reference to stage, then they are not in a display list // or if a simple hitTestObject is false, they cannot be intersecting. if( !target1.root || !target2.root || !target1.hitTestObject( target2 ) ) return new Rectangle(); // Get the bounds of each DisplayObject. var bounds1:Rectangle = target1.getBounds( target1.root ); var bounds2:Rectangle = target2.getBounds( target2.root ); // Determine test area boundaries. var intersection:Rectangle = new Rectangle(); intersection.x = Math.max( bounds1.x, bounds2.x ); intersection.y = Math.max( bounds1.y, bounds2.y ); intersection.width = Math.min( ( bounds1.x + bounds1.width ) - intersection.x, ( bounds2.x + bounds2.width ) - intersection.x ); intersection.height = Math.min( ( bounds1.y + bounds1.height ) - intersection.y, ( bounds2.y + bounds2.height ) - intersection.y ); return intersection; } public static function complexIntersectionRectangle( target1:DisplayObject, target2:DisplayObject, accurracy:Number = 1 ):Rectangle { if( accurracy <= 0 ) throw new Error( "ArgumentError: Error #5001: Invalid value for accurracy", 5001 ); // If a simple hitTestObject is false, they cannot be intersecting. if( !target1.hitTestObject( target2 ) ) return new Rectangle(); var hitRectangle:Rectangle = intersectionRectangle( target1, target2 ); // If their boundaries are no interesecting, they cannot be intersecting. if( hitRectangle.width * accurracy <1 || hitRectangle.height * accurracy <1 ) return new Rectangle(); var bitmapData:BitmapData = new BitmapData( hitRectangle.width * accurracy, hitRectangle.height * accurracy, false, 0x000000 ); // Draw the first target. bitmapData.draw( target1, HitTest.getDrawMatrix( target1, hitRectangle, accurracy ), new ColorTransform( 1, 1, 1, 1, 255, -255, -255, 255 ) ); // Overlay the second target. bitmapData.draw( target2, HitTest.getDrawMatrix( target2, hitRectangle, accurracy ), new ColorTransform( 1, 1, 1, 1, 255, 255, 255, 255 ), BlendMode.DIFFERENCE ); // Find the intersection. var intersection:Rectangle = bitmapData.getColorBoundsRect( 0xFFFFFFFF,0xFF00FFFF ); bitmapData.dispose(); // Alter width and positions to compensate for accurracy if( accurracy != 1 ) { intersection.x /= accurracy; intersection.y /= accurracy; intersection.width /= accurracy; intersection.height /= accurracy; } intersection.x += hitRectangle.x; intersection.y += hitRectangle.y; return intersection; } protected static function getDrawMatrix( target:DisplayObject, hitRectangle:Rectangle, accurracy:Number ):Matrix { var localToGlobal:Point;; var matrix:Matrix; var rootConcatenatedMatrix:Matrix = target.root.transform.concatenatedMatrix; localToGlobal = target.localToGlobal( new Point( ) ); matrix = target.transform.concatenatedMatrix; matrix.tx = localToGlobal.x - hitRectangle.x; matrix.ty = localToGlobal.y - hitRectangle.y; matrix.a = matrix.a / rootConcatenatedMatrix.a; matrix.d = matrix.d / rootConcatenatedMatrix.d; if( accurracy != 1 ) matrix.scale( accurracy, accurracy ); return matrix; } } }
发表评论
-
greenSock新老库
2012-08-07 13:25 0老库-做项目的时候比新库完全不抖啊 -
Starling开发的游戏源码
2012-07-26 17:13 0Starling开发的游戏源码 -
一个基于STARLING的TOWER塔防游戏
2012-07-24 15:27 0一个基于STARLING的TOWER塔防游戏 -
HttpStatusConfig --一个HTTP 协议返回的 解析说明类
2012-04-18 16:40 0package guwanyuan.qicool.game ... -
[转] [Flash/Flex] 加载SWF性能VS影片剪辑性能
2012-03-15 22:29 0http://bbs.9ria.com/viewthread. ... -
水果忍者鼠标跟随特效制作[转载]
2012-03-01 16:06 2457实现这效果其实比较简单,主要是思路~! package ... -
greensock-as3
2012-02-23 21:26 0greensock-as3 -
禁止输入文本可以粘贴
2012-02-10 13:15 2323//禁止输入文本粘贴动作 private static ... -
江湖情缘游戏里的跳的类
2012-02-08 23:55 0package com.app.role.montions ... -
ColorMatrixFilter - 获得相应颜色的色调 函数
2012-02-08 23:03 0/**获得相应颜色的色调的滤镜**/ public sta ... -
[教程] 路点导航(Waypoint Navigation)
2011-12-31 00:51 0前言:这个不难,所以知道的童鞋不要喷,不知道的童鞋也不要怕,要 ... -
ARPG游戏引擎设计思路
2011-12-31 00:48 00.整体结构 下载 (32.92 KB ... -
Flash_Rich_Text_Editor(完美的富文本编辑器)
2011-12-27 17:55 0Flash_Rich_Text_Editor(完美的富文 ... -
弹弹堂测试
2011-12-08 04:21 0弹弹堂测试弹弹堂测试 -
一些DEMO
2011-11-28 17:42 0一些DEMO一些DEMO -
[转]三次贝尔曲线
2011-11-10 01:09 1932http://bbs.9ria.com/viewt ... -
[心得] 完美解决as3在ie中初始化时stageWidth和stageHeight为0的问题
2011-11-03 00:46 2944先看下面的一段脚本,这是比较经典的初始化脚本: pa ... -
五子棋算法详解
2011-10-31 04:14 0五子棋算法详解五子棋算法详解五子棋算法详解 -
[转]服务器端ActionScript语言参考
2011-10-31 00:29 0服务器端ActionScript语言参考 -
Flash Player和Adobe AIR内部的垃圾回收机制
2011-10-29 22:37 0资讯类型: 翻译 来源页面: http://www.ad ...
相关推荐
在VB.NET中实现不规则图形的碰撞检测是一个有趣且实用的技术挑战,特别是在开发游戏或交互式应用程序时。本文将深入探讨这一主题,并基于提供的描述,分析实现这一功能的关键知识点。 首先,我们要理解“不规则图形...
在"LWDetection.h"头文件中,可能定义了一个名为"LWDetection"的类,这个类可能是用来封装不规则碰撞检测逻辑的。它可能会包含一些方法,如初始化多边形、设置顶点、进行碰撞检查等。例如: ```objc @interface ...
位图的碰撞检测是Flash开发中的一个重要技术,尤其在游戏制作和交互式应用程序中不可或缺。在AS3.0中,提供了多种碰撞检测方法,包括基本的`hitTestObject`和`hitTestPoint`,以及更高级的`BitmapData.hitTest`方法...
下面我们来看一个具体的示例,演示如何使用BitmapData.hitTest进行不规则图形之间的碰撞检测。 ```as public class BitmapCompare extends Sprite { public function BitmapCompare() { stage.align = StageAlign...
在二维不规则嵌套问题中,我们通常面临的是如何在一个大的二维空间内高效地放置多个形状不规则的小对象,使得这些小对象不重叠且占用的空间最小。这在制造业、物流、包装等领域有着广泛的应用。例如,木工切割、金属...
OgreOpcode是Ogre3D图形引擎的一个扩展库,用于实现高效的碰撞检测功能。由于其轻量级的特性,它成为了不使用完整物理引擎时的理想选择。然而,由于文档相对匮乏,初次接触OgreOpcode的开发者可能会遇到不少困难。...
碰撞检测,简单来说,就是判断虚拟世界中的两个或多个对象是否发生接触或接近,这一过程在游戏开发、物理模拟、机器人路径规划等领域具有广泛应用。算法的高效性和准确性直接影响到软件性能与用户体验。 首先,我们...
在游戏开发、物理模拟或者计算机图形学中,Region碰撞检测是一项关键的技术,用于确定两个或多个对象是否在空间上重叠或接触。本文件“4-14-5(Region碰撞检测).7z”可能包含关于这个主题的详细资料,如源代码、教程...
BitmapData是ActionScript 3.0中的一个类,它提供了对位图数据的低级访问,从而允许我们进行像素级别的操作,包括碰撞检测。 首先,让我们了解什么是BitmapData。BitmapData是Flash Player或Adobe AIR中用于处理...
- **凹形模型**:适用于复杂的几何形状,如不规则物体。 ##### 2.3 碰撞检测的场景特征 不同的虚拟场景具有不同的特征,这对碰撞检测算法的选择有很大影响。例如,在复杂场景中,可能需要采用层次化的检测策略来...
在电信设备领域,高效、精确的碰撞检测是关键任务之一,特别是在模拟通信系统中的多实体交互或优化网络布局时。本文将深入探讨一种基于包围盒树法(Bounding Volume Hierarchy,简称BVH)的并行碰撞检测方法。这种...
4. **使用Layer Culling**:Unity支持基于层的剔除机制,合理分配游戏对象到不同的图层,并设置合适的碰撞检测层,可以避免不必要的碰撞检测,进一步优化性能。 5. **Physics Material优化**:使用更简单的物理材质...
在游戏开发中,碰撞检测是不可或缺的一个环节,尤其是在实时性要求高的Moba(多人在线战术竞技)游戏中。基于距离的碰撞算法是一种优化过的碰撞检测方法,尤其适合于地图区域相对较小的游戏场景。这类算法通常比传统...
3. 碰撞检测:给定一个点或一组点,遍历四叉树,对于每个节点,检查其边界是否包含目标点,如果是,则继续检查其子节点,直到找到目标点或确定没有碰撞。 4. 删除操作:当某个对象移出四叉树的覆盖范围时,需要从树...
4. **不规则位图处理**:"不规则位图像素碰撞检测"可能是指处理具有不规则形状的图像。对于非矩形或非简单几何形状的对象,传统的碰撞检测方法可能不适用。这时,需要将对象转换为位图,并对位图进行像素级别的比较...
AABB是最基础的碰撞检测方式,通过为每个物体创建一个包围盒,只需比较包围盒之间是否有重叠就能快速判断是否发生碰撞。这种方法简便易行,适用于多物体的大规模碰撞检测。 然而,对于形状复杂的物体,AABB可能会...
在本文中,我们将深入探讨如何使用DXDraw API创建一个2D小程序,该程序包含了碰撞检测和精灵动画等关键功能。DXDraw是DirectX的一部分,它为开发者提供了在Windows平台上进行2D图形绘制的强大工具。 首先,DXDraw ...