cocos2d-x simplegame 如何检测碰撞问题 版本换了
void HelloWorld::updateGame(ccTime dt)
{
CCMutableArray<CCSprite*> *projectilesToDelete =
new CCMutableArray<CCSprite*>;
CCMutableArray<CCSprite*>::CCMutableArrayIterator it, jt;
for (it = _projectiles->begin(); it != _projectiles->end(); it++)
{
CCSprite *projectile =*it;
CCRect projectileRect = CCRectMake(
projectile->getPosition().x - (projectile->getContentSize().width/2),
projectile->getPosition().y - (projectile->getContentSize().height/2),
projectile->getContentSize().width,
projectile->getContentSize().height);
CCMutableArray<CCSprite*>*targetsToDelete =new CCMutableArray<CCSprite*>;
for (jt = _targets->begin(); jt != _targets->end(); jt++)
{
CCSprite *target =*jt;
CCRect targetRect = CCRectMake(
target->getPosition().x - (target->getContentSize().width/2),
target->getPosition().y - (target->getContentSize().height/2),
target->getContentSize().width,
target->getContentSize().height);
if (CCRect::CCRectIntersectsRect(projectileRect, targetRect))
{
targetsToDelete->addObject(target);
}
}
for (jt = targetsToDelete->begin(); jt != targetsToDelete->end(); jt++)
{
CCSprite *target =*jt;
_targets->removeObject(target);
this->removeChild(target, true);
_projectilesDestroyed++;
if (_projectilesDestroyed >= 5)
{
GameOverScene *gameOverScene = GameOverScene::node();
gameOverScene->getLayer()->getLabel()->setString("You Win!");
CCDirector::sharedDirector()->replaceScene(gameOverScene);
}
}
if (targetsToDelete->count() > 0)
{
projectilesToDelete->addObject(projectile);
}
targetsToDelete->release();
}
for (it = projectilesToDelete->begin(); it != projectilesToDelete->end(); it++)
{
CCSprite* projectile =*it;
_projectiles->removeObject(projectile);
this->removeChild(projectile, true);
}
projectilesToDelete->release();
}
cocos2d-x版本变了 这是老版本写的 现在CCmutableArray换成了CCarray然后代码需要更改,谁可以帮我改一下这个我第一次学习这个,最好帮着说明一下每句代码的意思,怎么检测碰撞的。急求,学习过这个的帮我一下这个我真的该不出来了。真心求 大神
[最优解释]
void TinySoccer::update(float dt)
{
CCArray *projectilesToDelete =new CCArray;
projectilesToDelete->retain();
for (int i=0;i < _projectiles->count();i++)
{
CCSprite *projectile =(CCSprite *)_projectiles->objectAtIndex(i);
CCRect projectileRect = CCRectMake(projectile->getPosition().x- (projectile->getContentSize().width/2),
projectile->getPosition().y- (projectile->getContentSize().height/2),
projectile->getContentSize().width,projectile->getContentSize().height);
CCArray *targetsToDelete= new CCArray;
targetsToDelete->retain();
for ( int j=0;j<_targets->count();j++)
{
CCSprite *target =(CCSprite *)_targets->objectAtIndex(j);
CCRect targetRect = CCRectMake(target->getPosition().x- (target->getContentSize().width/2),
target->getPosition().y- (target->getContentSize().height/2),
target->getContentSize().width,target->getContentSize().height);
if (CCRect::CCRectIntersectsRect(projectileRect, targetRect))
{
targetsToDelete->addObject(target);
}
}
for ( int k = 0;k< targetsToDelete->count();k++)
{
CCSprite *target =(CCSprite *)targetsToDelete->objectAtIndex(k);
_targets->removeObject(target);
this->removeChild(target, true);
_projectilesDestroyed++;
if (_projectilesDestroyed > 1)
{
GameOverScene *gameOverScene =(GameOverScene*) GameOverScene::node();
if(gameOverScene){
gameOverScene->getLayer()->getLabel()->setString("You Win!");
CCDirector::sharedDirector()->replaceScene(gameOverScene);
}
}
}
if (targetsToDelete->count() >0)
{
projectilesToDelete->addObject(projectile);
}
targetsToDelete->release();
}
for ( int i=0;i< projectilesToDelete->count();i++)
{
CCSprite* projectile =(CCSprite *)projectilesToDelete->objectAtIndex(i);
_projectiles->removeObject(projectile);
this->removeChild(projectile, true);
}
projectilesToDelete->release();
}
这个只能解决碰撞的问题,但是后面的还是有问题,暂时没有解决。
[其他解释]
下一个问题: GameOverScene *gameOverScene =(GameOverScene*) GameOverScene::create();