2014-06-26 122 views
-2

我是cocos2d-x的新手。我正在使用cocos2d-x在xcode中开发一款游戏。 在我的游戏中,我有精灵动画(人)和移动障碍物和硬币。我与精灵动画&硬币相撞。当我获得10个硬币时,我将添加一个生命(为生活添加一个精灵)。我的问题是当精灵动画(人)&障碍之间发生碰撞,生活应该减少(我的意思是生活精灵应该删除),但它不会被删除。 我正在使用以下代码。在cocos2d-x中删除一个精灵

if(coincount%10==0) 
{ 
    lifecount=lifecount+1; 
} 
if(lifecount==1) 
{ 
life = CCSprite::create("life.png"); 
life->setPosition(ccp(winwsize/2, winhsize/1.08)); 
this->addChild(life, 5); 
} 
else if(lifecount==2) 
{ 
life1 = CCSprite::create("life.png"); 
life1->setPosition(ccp(winwsize/1.8, winhsize/1.08)); 
this->addChild(life1, 5); 
} 
else if (lifecount==3) 
{ 
life2 = CCSprite::create("life.png"); 
life2->setPosition(ccp(winwsize/1.6, winhsize/1.08)); 
this->addChild(life2, 5); 
} 

if (manRect.intersectsRect(obs5Rect)) 
{ 
if(lifecount>=1) 
{ 
lifecount=lifecount-1; 
this->scheduleOnce(schedule_selector(PlayScene::remove),0.5f); 
} 

void PlayScene::remove() 
{ 
if(lifecount==0) 
{ 
    this->removeChild(life, true); 
} 
else if(lifecount==1) 
{ 
this->removeChild(life1, true); 
} 
else if(lifecount==2) 
{ 
this->removeChild(life2, true); 
} 

但是,当障碍物与精灵动画(人)碰撞时,精灵不移除。 请任何人都可以帮助我找到解决方案。谢谢。

回答

0

我认为最好的办法是做:

life1->setTag(99); // i made up the 99 

,然后当你想删除它使用removeChildByTag(99);

-1

看来问题出在你的remove函数中。当lifeCount分别为1,2或3时,您创建精灵life, life1, life2。但在你remove方法,你是否lifeCount为0,1或2。如果是3,没有一个精灵会被删除,因为没有条件得到满足。你也不要在任何地方去除lifeCount

解决方案:
要么添加--lifecount;remove()开始,还是适当地改变你的条件和减少在最后的计数器。

建议:
如果我可以建议一个improvemt到您的代码:你应该让你的精灵life在阵列中,这样,当你决定要添加的可能性有更多的生命,它会容易得多。

让我知道是否有什么不清楚。

+0

我编辑我的问题。在调用remove函数之前,我减少了lifecount = lifecount-1。 – arunkumar

+0

那么,这是否意味着这个建议不能解决问题?你也可以尝试调用'life-> removeFromParentAndCleanup(true)'而不是'this-> removeChild(...)' – Losiowaty

1
First setTag on Sprite like: 
Sprite->setTag(111); 
removeChildByTag(111); 

     OR 

Sprite->removeFromParent();