继承问题
我有5个球漂浮在屏幕周围,两侧,顶部和底部反弹。多数民众赞成。我现在要做的就是解决它们中的任何一个相互碰撞的问题。
我知道
if (CGRectIntersectsRect(image1.frame, image2.frame))
{
}
但是只检查两张图片,我需要检查所有图像和每张图像。
我到处检查但是找不到答案,只有其他人搜索同样的东西,任何想法?
提前致谢
Spriggsy
编辑:
使用它来查找CGRect并将其存储在数组中
ball1 = NSStringFromCGRect(image1.frame);
ball2 = NSStringFromCGRect(image2.frame);
ball3 = NSStringFromCGRect(image3.frame);
ball4 = NSStringFromCGRect(image4.frame);
ball5 = NSStringFromCGRect(image5.frame);
bingoarray = [NSMutableArray arrayWithObjects:ball1,ball2,ball3,ball4,ball5,nil];
然后传递给碰撞检测方法
-(void)collision {
for (int i = 0; i<[bingoarray count]-1 ; i++) {
CGRect ballA = CGRectFromString([bingoarray objectAtIndex:i]);
if (CGRectIntersectsRect(ballA, image1.frame)) {
NSLog(@"test");
}
}
我想我应该检查一个球对所有其他球。
所以球1对其他人进行了检查,但没有检查球2对他们。这差不多了?
}
答案 0 :(得分:0)
理想的解决方案是将所有矩形存储到interval tree或segment tree中,以便有效地计算任何重叠区域。请注意,您必须为您的用例推广到2个维度。
另一种有效的方法是使用K-d tree找到最近的其他球并与最近的邻居进行比较,直到没有碰撞。
简单的方法是简单地遍历所有球并将它们与具有更高ID的所有其他球进行比较(以避免重复检查ball1
- &gt; ball2
和ball2
- &gt; ball1
)。
由于你一次只有5个,所以迭代方法可能足够快,不能在动画中删除帧,但是如果你计划支持更多的球,你应该考虑一个更具可扩展性的解决方案,因为在{{中运行简单的appreach 3}}
答案 1 :(得分:-1)
这是一个有趣的小数学问题,以避免多余。
您可以创建图像数组。并循环遍历它,检查每个成员是否与任何连续成员发生碰撞。
如果需要,我可以用代码拼出更多。
编辑我无法抗拒// the images are in imagesArray
//where you want to check for a collision
int ballCount = [imagesArray count];
int v1Index;
int v2Index;
UIImageView * v1;
UIImageView * v2;
for (v1Index = 0; v1Index < ballCount; v1Index++) {
v1 = [imagesArray objectAtIndex:v1Index];
for (v2Index = v1Index+1; v2Index < ballCount; v2Index++) {
v2 = [imagesArray objectAtIndex:v2Index];
if (CGRectIntersectsRect(v1.frame, v2.frame)) {
// objects collided
// react to collision here
}
}
}