像素完美碰撞?

时间:2009-08-06 19:55:37

标签: iphone pixel-perfect

是否可以在基于视图的应用程序中进行像素完美碰撞?我一直在寻找示例代码,但没有运气......还可以使用彩色位图来表示某种颜色的碰撞吗?

1 个答案:

答案 0 :(得分:2)

你可以。如果使用 CGImage ,它看起来最简单。

您可以创建一个2D布尔数组来读取像素值以构建命中网格(基本上是2x2矩阵),然后将其存储在游戏对象类中。

您需要直接访问CGImage (the code is here)的像素数据,然后使用for循环,将像素数据读入数组布尔值:

BOOL pixelGrid[xPixels][yPixels];
for (int i = 0; i < xPixels; i++) {
    for (int j = 0; j < yPixels; j++) {
        pixelGrid[i][j] = pixelIsOpaque(i, j);
    }
}

上面的方法pixelIsOpaque()显然不存在,只需替换为示例代码提供的任何内容来提取像素值。您正在存储是否存在像素(基本上检查像素是否为不透明度> 0)

一旦有了这个网格(在程序开头生成一次并将生成的2D数组存储在游戏对象中),那么你需要一个碰撞检测方法。

BOOL detectCollision( BOOL *pixelGrid1, BOOL *pixelGrid2 ) {
BOOL result = NO;  
    for (int i = 0; i < xPixels; i++) {
        for (int j = 0; j < yPixels; j++) {
            if ( pixelGrid1[i][j].opacity != 0 && pixelGrid2[i][j].opacity != 0] ) {
                result = YES; break;
            }

    }
}
return result;
}

我刚刚编写了这段代码,所以我可能不是100%可编辑但我希望它能给你这个想法。 您可以轻松修改此项,但不要与不透明度进行比较,只需再次与像素颜色值进行比较,see here即可获取原始颜色数据。