我试图在两个精灵之间发生碰撞,但我还没有完成它。 我安排选择器来验证碰撞,另一个选择器来生成敌人精灵。问题是他们没有碰撞。
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");
}
}
答案 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 确定您知道从哪里运行它。限制在您的游戏资源可能的位置。始终先备份。