首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

cocos2d-x simplegame 怎么检测碰撞有关问题 版本换了

2012-12-15 
cocos2d-x simplegame 如何检测碰撞问题 版本换了void HelloWorld::updateGame(ccTime dt){ CCMutableArra

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();

热点排行