Collision detection cocos2d-x中的碰撞检测不正确

Collision detection cocos2d-x中的碰撞检测不正确,collision-detection,cocos2d-x,Collision Detection,Cocos2d X,我遵循使用边界框方法的简单碰撞检测方法,并检查它们是否相交 代码如下: CCRect projectileRect = projectileSprite->boundingBox(); CCRect enemyRect = enemySprite->boundingBox(); if (projectileRect.intersectsRect(enemyRect)) { // do stuff } 编辑:我还尝试创建自己的边界框,获得x、y位置,并添加精灵的

我遵循使用边界框方法的简单碰撞检测方法,并检查它们是否相交

代码如下:

CCRect projectileRect = projectileSprite->boundingBox();      
CCRect enemyRect = enemySprite->boundingBox();

if (projectileRect.intersectsRect(enemyRect)) {
    // do stuff
}
编辑:我还尝试创建自己的边界框,获得x、y位置,并添加精灵的宽度和高度

现在,一件有趣的事情发生了,碰撞检测工作,但它的工作有点不正确。碰撞检测在实际交叉口发生之前被检测到

我通过打开CC_SPRITE_DEBUG_DRAW验证了这一点,它确实发生在碰撞发生前的几分钟,即投射物的边界框在敌人的边界框之外

这似乎是大多数人推荐的基本功能,而我似乎遗漏了一些东西。谁能推断出我可能做错了什么

PS:我用cocos2d-x-2.2和cocos2d-2.1rc0-x-2.1.3验证了这一点

PPS:另一方面,我尝试使用ccDrawSolidRect绘制自己的边界框,但似乎无法正常工作。

boundingBox()只提供节点的边界/rect,而不考虑其在父节点上的位置。您需要根据其位置进行如下转换:

CCSize = projectileSprite->getContentSize();
CCRect projectileRect = CCRectMake(
    projectileSprite->getPosition().x - (size.width/2),
    projectileSprite->getPosition().y - (size.height/2),
    size.width,
    size.height);

size = enemySprite->getContentSize();
CCRect enemyRect = CCRectMake(
    enemySprite->getPosition().x - (size.width/2),
    enemySprite->getPosition().y - (size.height/2),
    size.width,
    size.height);

if (projectileRect.intersectsRect(enemyRect)) {
    // Collision detected
}

我相信我是通过老的“使用printfs(cclog)遍历代码并检查框架代码”方法找到答案的

我认为这是intersectRect方法的一个局限性。发生的是我的射弹精灵旋转了。现在,当精灵旋转时,您会注意到,max X和max Y不在同一坐标中。一种可能的组合是(最小X,最大Y),(最小Y,最大X)

intersectRect没有考虑这种可能性,并且假设一个rect始终与X轴和Y轴平行,在我的场景中不是这样


希望这对别人有帮助。在我写出一个简单的方法来解决这个问题之后,我会发布一个解决方案。

对不起,我忘了提到我已经做过了。我添加了一个编辑。不,我发现问题出在哪里,是我的精灵的旋转。也许设置锚点可以解决这个问题?我会调查的