- 浏览: 25436 次
- 性别:
- 来自: 北京
文章分类
最新评论
(此为国外网站的自动英译中,- -!遗憾的是不能手动调回英文状态... 所以措词看的很不舒服! 但代码和他说的几个碰撞的介绍的地址,还是值得保留和参考的)
你将不得不自己,程序这和小心的像素碰撞可能是 iPhone 来说太贵了。 我的建议是写 (称为在每个其他编程语言中的接口) 的 Collidable 协议,给它一个 collidedWith:(Collidable *) c 函数然后为您要允许的碰撞的任何对象只是实现的。 然后,您可以编写个案的碰撞逻辑。 同样地,您可以将您需要的碰撞的所有信息的大超类 (你的情况是一个 X、 Y、 宽度,和高度,或 X、 Y 和一个像素数据数组) 和 collidesWith 方法。 多表演的两种方法,您可以编写一束不同碰撞方法.如果你只做的几件事像素碰撞,它不会被命中。 通常,不过,这是做边界框碰撞或基于几何,一些其他碰撞,因为很 明显 更快更好的。
在 metanetsoftware 上的人们作出一些伟大的教程,它们之间的碰撞技术 轴分离碰撞 和 基于网格的碰撞,后者的这听起来像它会更可行的游戏。 如果您希望但是坚持使用强力的碰撞检测 (检查每个针对每个其他对象的对象) 然后使外框,是只 小 不是图像通常是正确的路来走。 这是多少成功 platformers 做到包括超级马里奥 Brothers.You 也可考虑加权外框-就是有一个边界框的一种类型的对象,另一种大小为他人的其中一个。例如马里奥,您有一个较大的框,以打硬币,比你的敌人。
现在,即使我已经警告过你不这样做,我会帮你,放在如何基于像素的碰撞。你会想要您的 CGImage 的 像素数据的访问,然后循环访问看如果此图像与任何其他图像共享位置的所有像素。这里的一些规范
for (int i = 0; i < [objects count]; i++) { MyObject *obj1 = [objects objectAtIndex:i]; //Compare every object against every other object. for (int j = i+1; j < [objects count]; j++) { MyObject *obj2 = [objects objectAtIndex:j]; //Store whether or not we've collided. BOOL collided = NO; //First, do bounding box collision. We don't want to bother checking //Pixels unless we are within each others' bounds. if (obj1.x + obj1.imageWidth >= obj2.x && obj2.x + obj2.imageWidth >= obj1.x && obj1.y + obj1.imageHeight >= obj2.y && obj2.y + obj2.imageGeight >= obj1.y) { //We want to iterate only along the object with the smallest image. //This way, the collision checking will take the least time possible. MyObject *check = (obj1.imageWidth * obj1.imageHeight < obj2.imageWidth * obj2.imageHeight) ? obj1 : obj2; //Go through the pixel data of the two objects. for (int x = check.x; x < check.x + check.imageWidth && !collided; x++) { for (int y = check.y; y < check.y + check.imageHeight && !collided; y++) { if ([obj1 pixelIsOpaqueAtX:x andY:y] && [obj2 pixelIsOpaqueAtX:x andY:y]) { collided = YES; } } } } } }
发表评论
-
像素级碰撞算法1
2010-11-16 20:12 918boolean isCollisionPolygon(int[ ... -
XNA中关于2D图形像素碰撞
2010-11-16 20:05 1047下面所介绍的例子是微软官方的一个例子,这里给出下载XNA官方2 ... -
子弹跟踪算法2
2010-11-16 20:04 1583很多玩过飞行射击类游戏的朋友都对跟踪导弹印象深刻,手 ... -
子弹跟踪算法1
2010-11-16 20:04 2166首先,本文讨论的是很简单的算法。高手莫入。 在飞行射 ... -
卡马克地图缓冲图大小计算方法
2010-11-16 20:03 1055背景缓冲的大小 背景缓冲图像的大小要大于屏幕最多可涉及的Ti ... -
基于2D多边形的碰撞检测和响应(七)
2010-11-16 20:03 964为了不浪费时间介 ... -
基于2D多边形的碰撞检测和响应(六)
2010-11-16 20:02 913六、计算触点 为了动 ... -
基于2D多边形的碰撞检测和响应(五)
2010-11-16 20:02 956五、处理旋转 在许多游戏中都可以发现一些旋转的物体。与它们的 ... -
基于2D多边形的碰撞检测和响应(四)
2010-11-16 20:01 860四、 基本弧碰撞响应 下面要作的是用给定的量将两个物 ... -
基于2D多边形的碰撞检测和响应(三)
2010-11-16 20:00 1163三、对快速移动的物体做进一步扩展 上述方法处理慢速移动物体 ... -
基于2D多边形的碰撞检测和响应(二)
2010-11-16 19:59 1241二、用于碰撞响应的扩展分离坐标轴方法 检测多边形相交是非常有 ... -
基于2D多边形的碰撞检测和响应(一)
2010-11-16 19:57 2217简介 本文是阐述如何 ...
相关推荐
在这个场景中,"像素碰撞检测源码"是指使用Cocos2d-x框架实现的像素级别的碰撞检测算法。 传统的碰撞检测方法通常基于矩形或圆形等简单的几何形状,但这种方法无法精确处理复杂形状的物体。像素碰撞检测则更加精确...
基于距离的碰撞算法是一种优化过的碰撞检测方法,尤其适合于地图区域相对较小的游戏场景。这类算法通常比传统的矩形或圆形碰撞检测更为精确,能够处理更复杂的形状,并且计算效率相对较高。 **基于距离的算法基础**...
1. **应用范围**:矩阵碰撞算法适用于2D场景,如像素艺术游戏、物理引擎等。对于3D环境,通常需要使用更加复杂的碰撞检测技术,如包围盒(AABB)、OBB(轴对齐包围盒)或球体碰撞。 2. **优化**:为了进一步提高...
像素碰撞检测的原理是检查两个精灵的像素点是否有重叠。每个像素点由RGBA四个数据组成,其中A代表alpha值,即透明度。当两个精灵的像素点透明度都不为0时,就意味着在这些像素点上发生了碰撞。 实现像素碰撞检测的...
2. **封装好的类**:描述中提到的"封装好的类"通常指的是已经编写好并优化过的像素碰撞检测类库,开发者可以直接引入并使用,无需从零开始编写代码。这类类库通常包含高效的数据结构和算法,可以快速地进行像素比较...
5. **多边形碰撞**:如果需要检测复杂形状,可以将位图转换为多边形,然后使用更高效的几何碰撞算法。 通过这样的自定义类,开发者可以实现更复杂的碰撞检测逻辑,提高游戏或其他互动应用的精确性和用户体验。在...
2. **A*寻路算法**:A* 是一种广泛应用的路径搜索算法,用于在图形化网格或图中找到两点间的最短路径。它基于启发式函数,结合了Dijkstra算法的全局最优性和BFS(广度优先搜索)的高效性。 3. **四叉树**:四叉树是...
位图的碰撞检测是Flash开发中的一个重要技术,尤其在游戏制作和交互式应用程序中不可或缺。...然而,要注意的是,高效的碰撞检测往往需要对算法和数据结构有深入的理解,以便在保证精度的同时,尽可能减少计算开销。
在Flash中,常见的碰撞检测方法包括矩形碰撞检测(Rectangular collision)、精确形状碰撞检测(Exact shape collision)以及像素级碰撞检测(Pixel-perfect collision)。 2. **矩形碰撞检测**: 这是最简单也最...
【基于GPU的碰撞检测算法】 在计算机图形学和虚拟现实应用中,碰撞检测是一个至关重要的基础组件,广泛应用于虚拟制造、CAD/CAM、动画、物理模拟、游戏等多个领域。传统的碰撞检测算法通常在物体空间中实现,依赖于...
`vc+gdi没用directx.txt`可能包含了项目的整体结构和GDI相关的函数调用,而"场景移动+像素碰撞"可能是具体的实现细节,比如移动函数和碰撞检测算法。 六、实际应用 尽管DirectX在游戏开发中更为常见,因为它提供了...
6. **像素碰撞**(J2ME 中的): - 在J2ME这样的移动平台开发中,可能需要像素级别的碰撞检测,这通常涉及到逐像素比较两个图像或颜色区域。 7. **直线与矩形碰撞**: - 检测一条直线是否与矩形的边界有任何交点...
本篇文章主要探讨了三种基本的碰撞检测方法:矩形碰撞、圆形碰撞以及像素碰撞,并且涉及到了多矩形碰撞的处理。 1. **矩形碰撞检测**: 矩形碰撞检测通常用于简单形状的游戏对象,例如平台跳跃类游戏中的角色和...
- 调用`hitTest`函数比较`bmp1`和`bmp2`,如果有像素重叠则返回`true`。 #### 四、实例分析 假设我们有两个复杂的不规则图形,需要检测它们之间的碰撞: 1. **创建不规则图形**: - 可以通过随机绘制线条或使用...
在DirectDraw中,可以利用GDI函数或者自定义的像素级扫描算法实现这种检测。 2. **近似碰撞检测**:对于更复杂的形状,如多边形,可能需要使用更高级的技术,如分离轴定理(Separating Axis Theorem,SAT)。该定理...
- **像素着色器**:在像素着色阶段进行更精细的碰撞检测。 #### 碰撞检测算法的优化 为了提高游戏的实时性和流畅性,对碰撞检测算法进行优化至关重要。以下是一些常用的优化策略: - **层次包围盒**:使用多层...
在Java编程语言中,碰撞检测是一项关键的技术,尤其在开发2D游戏时,它用于判断游戏中的物体(如小球)是否与其他物体或环境边缘发生碰撞。本项目提供了一个具体的实现,专注于检测小球与边缘的碰撞。我们将深入探讨...
- `碰撞检测2.fla`:可能进一步展示了如何处理复杂形状的碰撞检测,可能涉及分离轴定理或其他多边形碰撞算法。 - `碰撞检测3.fla`:可能是对前两个示例的拓展,例如增加了动态物体的碰撞响应或者优化了检测性能。 ...