碰撞检测不会发生碰撞

时间:2014-05-16 05:24:58

标签: c++ cocos2d-x

我试图在两个精灵之间发生碰撞,但我还没有完成它。 我安排选择器来验证碰撞,另一个选择器来生成敌人精灵。问题是他们没有碰撞。

this->schedule(schedule_selector(HelloWorld::addenemy),2);
this->schedule(schedule_selector(HelloWorld::collisionEnemy),2);

我如上所述安排两个选择器,但是如果我尝试使用小于2(小于addEnemy计时器)的值来安排collisionEnemy,那么我会收到一个错误:

libpng warning: iCCP: known incorrect sRGB profile

如果我将值设为2或更大,则标识符不会发生冲突

这是collisionEnemy选择器:

void HelloWorld::collisionEnemy(float dt)
{
    CCSprite *player = (CCSprite*)getChildByTag(1);
    CCSprite *enemy = (CCSprite*)getChildByTag(3);

    CCRect playerRect = CCRectMake(
                                   player->getPosition().x - (player->getContentSize().width/2),
                                   player->getPosition().y - (player->getContentSize().height/2),
                                   player->getContentSize().width,
                                   player->getContentSize().height);

    CCRect miniBarrierRect = CCRectMake(
                                   enemy->getPosition().x - (enemy->getContentSize().width/2),
                                   enemy->getPosition().y - (enemy->getContentSize().height/2),
                                   enemy->getContentSize().width,
                                   enemy->getContentSize().height);

    if (playerRect.intersectsRect(enemyRect)) {

        CCLog("enemy Collision");

    } else {

        CCLog("not enemy Collision");
        }



    }

1 个答案:

答案 0 :(得分:2)

如果你想要真正的碰撞检测,我想你应该看看Box2D

非常简单的碰撞检测:

cocos2d::Vector2 p = touch->getLocation();

cocos2d::Rect rect = _sprite->getBoundingBox();

if(rect.containsPoint(p))
{
    // collision
}
else
{
    // no collision
}

您的警告libpng warning: iCCP: known incorrect sRGB profile就是这样。像Photoshop这样的工具嵌入了不良的ICCP块。如果您有ImageMagick,您可以轻松摆脱警告

find . -type f -name "*.png" -exec convert {} -strip {} \;

在运行上述命令之前 make 确定您知道从哪里运行它。限制在您的游戏资源可能的位置。始终先备份。