0

处理盘子从上到下掉落的游戏。一些板块也会在地面上“反弹”,然后再次开始向上移动。这会导致下降板与“上升板”发生碰撞的情况。

我的问题?我不知道如何检测这种碰撞。

由于所有的盘子都来自同一个班级,我不能写 if(CGRectIntersectsRect([self boundingBox], [self boudingBox])) ,因为这个陈述永远是正确的。

我用for循环创建了盘子:

for(i=0; i<9; i++){

 Plate *plate = [Plate initPlate];

}

然后在整个游戏中重复使用这些盘子。

关于如何检测两个板之间的碰撞的任何想法或解决方法?任何建议将不胜感激。

问候。

4

2 回答 2

1

您需要有一个类来管理(例如使用 NSMutableArray)一组板块,而不是在板块类上检查碰撞,而是在这个新类上进行。

假设您的数组是:

NSMuttableArray *plateSet

你可以这样做:

for (Plate *bouncingPlate in plateSet)
{
    if ([bouncingPlate bouncing])
    {
        for (Plate *fallingPlate in plateSet)
        {
            if (![fallingPlate bouncing])
            {
                /* Check for collision here between fallingPlate and bouncingPlate */
            }
        }
    }
}

或者,更优雅地:

for (Plate *bouncingPlate in plateSet)
{
    if (![bouncingPlate bouncing])
    {
        continue;
    }

    for (Plate *fallingPlate in plateSet)
    {
        if ([fallingPlate bouncing])
        {
            continue;
        }
        /* Check for collision here between fallingPlate and bouncingPlate */
    }
}
于 2012-06-28T00:00:56.850 回答
0

是的...您需要将它们添加到 aNSMutableArray然后仅用于ccpDistance检查碰撞

像这样的东西:

for (int i=0;i<8,i++){
   for (int j=i+1,j<9,j++){
if(ccpDistance([[plates objectAtIndex:i]position],[[plates objectAtIndex:j]position])<plateRadius*2) {
//collision detected
}}}

当然,如果盘子是圆圈,这将有效

对于正方形使用CGRectIntersectsRect

 for (int i=0;i<8,i++){
   for (int j=i+1,j<9,j++){
if([plates objectAtIndex:i].visible && [plates objectAtIndex:j].visible &&(CGRectIntersectsRect([[plates objectAtIndex:i]boundingBox],[[plates objectAtIndex:j]boundingBox])) {
//collision detected
}}}
于 2012-06-28T00:59:31.167 回答