gpt4 book ai didi

iphone - 像素完美碰撞?

转载 作者:行者123 更新时间:2023-12-03 21:13:26 27 4
gpt4 key购买 nike

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

最佳答案

你可以。不过,如果您使用CGImage,这看起来是最简单的。

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

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

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)

一旦有了这个网格(在程序开始时生成一次并将生成的二维数组存储在游戏对象内),那么您就需要一个碰撞检测方法。

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用于获取原始颜色数据。

关于iphone - 像素完美碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1241023/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com