精灵和精灵数组之间的碰撞检测

时间:2014-07-22 20:33:36

标签: c++ ios cocos2d-x cocos2d-x-2.x

我正在研究一个无限的跑步者,我需要在一个精灵和精灵的CCArray中的任何精灵之间进行碰撞检测。你怎么建议我这样做?目前这是我调用检查冲突的方法,但它不起作用。

bool RunningScene::spritesAreColliding(cocos2d::CCSprite *spr1, cocos2d::CCSprite *spr2)
{
//Take the bounding box of the two sprites that are bounded
CCRect r1 = spr1->boundingBox();
CCRect r2 = spr2->boundingBox();

if (r1.intersectsRect(r2)) { //Check if the bounding boxes are intersecting and return a true/false
    return true;
} else {
    return false;
}

}

我在if语句中使用它,如果它返回true,则if语句有效。 我不希望像素完美的碰撞检测,但我想知道该方法是否适用于检查碰撞,我想知道如何从CCArray访问碰巧与_runner精灵碰撞的任何精灵。

1 个答案:

答案 0 :(得分:0)

我不确定为什么你的代码不起作用,因为我无法看到你在做什么。假设该方法返回true。你做什么的?

碰撞检测很困难。我建议你查看本书的相应章节:Real Time Collision Detection

有两种方法:连续和离散。

您似乎正在尝试使用离散碰撞检测。这是在发生碰撞后对的碰撞作出反应的时候。您需要找到穿透轴,以便知道将盒子分开的方向。实现这一目标的一种简单但缓慢的方法是进行某种二分搜索。目前就在之前,他们开始发生碰撞。在施加速度之前将物体移动到它们的位置(帧开始)。现在应用一半的速度。他们相交吗?如果不是,则应用0.75的速度,如果是,则应用0.25的速度。重复预设的迭代次数,直到它们不再相交。

你还必须设定他们的速度,以便他们能够反弹'或者至少停止沿着它们最后交叉的轴移动。

离散碰撞检测存在问题。最着名的问题是隧道效应。这是当物体移动得如此之快以至于它们不相交时。当他们应用他们的速度时,他们会相互移动'并且碰撞永远不会被抓住。对于2D碰撞检测,我建议采用连续方法。