`

像素级碰撞算法2

阅读更多

(此为国外网站的自动英译中,- -!遗憾的是不能手动调回英文状态... 所以措词看的很不舒服! 但代码和他说的几个碰撞的介绍的地址,还是值得保留和参考的)

 

 

你将不得不自己,程序这和小心的像素碰撞可能是 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; 
                    } 
                } 
            } 
        } 
    } 
} 

 

分享到:
评论

相关推荐

    像素碰撞检测源码

    在这个场景中,"像素碰撞检测源码"是指使用Cocos2d-x框架实现的像素级别的碰撞检测算法。 传统的碰撞检测方法通常基于矩形或圆形等简单的几何形状,但这种方法无法精确处理复杂形状的物体。像素碰撞检测则更加精确...

    基于距离的碰撞算法

    基于距离的碰撞算法是一种优化过的碰撞检测方法,尤其适合于地图区域相对较小的游戏场景。这类算法通常比传统的矩形或圆形碰撞检测更为精确,能够处理更复杂的形状,并且计算效率相对较高。 **基于距离的算法基础**...

    矩阵碰撞算法

    1. **应用范围**:矩阵碰撞算法适用于2D场景,如像素艺术游戏、物理引擎等。对于3D环境,通常需要使用更加复杂的碰撞检测技术,如包围盒(AABB)、OBB(轴对齐包围盒)或球体碰撞。 2. **优化**:为了进一步提高...

    JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解

    像素碰撞检测的原理是检查两个精灵的像素点是否有重叠。每个像素点由RGBA四个数据组成,其中A代表alpha值,即透明度。当两个精灵的像素点透明度都不为0时,就意味着在这些像素点上发生了碰撞。 实现像素碰撞检测的...

    flash 像素碰撞

    2. **封装好的类**:描述中提到的"封装好的类"通常指的是已经编写好并优化过的像素碰撞检测类库,开发者可以直接引入并使用,无需从零开始编写代码。这类类库通常包含高效的数据结构和算法,可以快速地进行像素比较...

    AS3.0像素级别精确检测碰撞

    5. **多边形碰撞**:如果需要检测复杂形状,可以将位图转换为多边形,然后使用更高效的几何碰撞算法。 通过这样的自定义类,开发者可以实现更复杂的碰撞检测逻辑,提高游戏或其他互动应用的精确性和用户体验。在...

    3D游戏中常用算法 如碰撞检测 A* 四叉树 BSP分割树 地形LOD等等

    2. **A*寻路算法**:A* 是一种广泛应用的路径搜索算法,用于在图形化网格或图中找到两点间的最短路径。它基于启发式函数,结合了Dijkstra算法的全局最优性和BFS(广度优先搜索)的高效性。 3. **四叉树**:四叉树是...

    AS3.0高级碰撞检测

    位图的碰撞检测是Flash开发中的一个重要技术,尤其在游戏制作和交互式应用程序中不可或缺。...然而,要注意的是,高效的碰撞检测往往需要对算法和数据结构有深入的理解,以便在保证精度的同时,尽可能减少计算开销。

    flash 碰撞

    在Flash中,常见的碰撞检测方法包括矩形碰撞检测(Rectangular collision)、精确形状碰撞检测(Exact shape collision)以及像素级碰撞检测(Pixel-perfect collision)。 2. **矩形碰撞检测**: 这是最简单也最...

    一种基于GPU的碰撞检测算法.pdf

    【基于GPU的碰撞检测算法】 在计算机图形学和虚拟现实应用中,碰撞检测是一个至关重要的基础组件,广泛应用于虚拟制造、CAD/CAM、动画、物理模拟、游戏等多个领域。传统的碰撞检测算法通常在物体空间中实现,依赖于...

    visual c++ vc开发编写2d游戏之 游戏场景移动及像素碰撞 源码 用的gdi没用directx

    `vc+gdi没用directx.txt`可能包含了项目的整体结构和GDI相关的函数调用,而"场景移动+像素碰撞"可能是具体的实现细节,比如移动函数和碰撞检测算法。 六、实际应用 尽管DirectX在游戏开发中更为常见,因为它提供了...

    程序中几何图形间的距离计算(碰撞检测)

    6. **像素碰撞**(J2ME 中的): - 在J2ME这样的移动平台开发中,可能需要像素级别的碰撞检测,这通常涉及到逐像素比较两个图像或颜色区域。 7. **直线与矩形碰撞**: - 检测一条直线是否与矩形的边界有任何交点...

    Android游戏开发之碰撞检测(矩形碰撞、圆形碰撞、像素碰撞)

    本篇文章主要探讨了三种基本的碰撞检测方法:矩形碰撞、圆形碰撞以及像素碰撞,并且涉及到了多矩形碰撞的处理。 1. **矩形碰撞检测**: 矩形碰撞检测通常用于简单形状的游戏对象,例如平台跳跃类游戏中的角色和...

    flash游戏开发第一张 高级碰撞检测

    - 调用`hitTest`函数比较`bmp1`和`bmp2`,如果有像素重叠则返回`true`。 #### 四、实例分析 假设我们有两个复杂的不规则图形,需要检测它们之间的碰撞: 1. **创建不规则图形**: - 可以通过随机绘制线条或使用...

    DirectDraw简单碰撞检测

    在DirectDraw中,可以利用GDI函数或者自定义的像素级扫描算法实现这种检测。 2. **近似碰撞检测**:对于更复杂的形状,如多边形,可能需要使用更高级的技术,如分离轴定理(Separating Axis Theorem,SAT)。该定理...

    碰撞检测(毕业论文)

    - **像素着色器**:在像素着色阶段进行更精细的碰撞检测。 #### 碰撞检测算法的优化 为了提高游戏的实时性和流畅性,对碰撞检测算法进行优化至关重要。以下是一些常用的优化策略: - **层次包围盒**:使用多层...

    Java实现的碰撞检测代码-测试小球碰撞边缘.rar

    在Java编程语言中,碰撞检测是一项关键的技术,尤其在开发2D游戏时,它用于判断游戏中的物体(如小球)是否与其他物体或环境边缘发生碰撞。本项目提供了一个具体的实现,专注于检测小球与边缘的碰撞。我们将深入探讨...

    flash里的碰撞检测

    - `碰撞检测2.fla`:可能进一步展示了如何处理复杂形状的碰撞检测,可能涉及分离轴定理或其他多边形碰撞算法。 - `碰撞检测3.fla`:可能是对前两个示例的拓展,例如增加了动态物体的碰撞响应或者优化了检测性能。 ...

Global site tag (gtag.js) - Google Analytics