2013-06-14 1 views
0

У меня есть EXC_BAD_ACCESS (code = 1 ...) иногда код = 2, используя cocos2d-x. получаю эту ошибку, когда я, например:cocos2d-x: У меня есть EXC_BAD_ACCESS

std::cout << this->getChildrenCount() << std::endl; 
std::cout << this->getChildrenCount() << std::endl; 

На этом точном коде, первая линия работает, но вторая дает мне ошибку.

Я пытался связаться со всеми детьми, поэтому я мог бы выполнять функцию типа «эй, увядает все объекты с этим значением», так как они находятся внутри класса, расширяющего CCNode.

void BasicElement::fadeTo(int opacity, float duration) 
{ 
    CCActionInterval* actionTo = CCFadeTo::create(duration, opacity); 
    CCArray* pChildren = this->getChildren(); 
    if (pChildren && pChildren->count() > 0) 
    { 
     CCObject* pObject = NULL; 
     CCARRAY_FOREACH(pChildren, pObject) 
     { 
      CCSprite* pChild = (CCSprite*) pObject; 
      pChild->stopAllActions(); 
      pChild->runAction(actionTo); 
     } 
    } 
} 

уже пытались сделать свой собственный CCArray добавляя элементы, которые я AddChild, но ... Те же проблемы сохраняются.

Может ли кто-нибудь помочь мне с этим?

ответ

0

Вы не можете использовать один и тот же CCAction для более чем одного спрайта. Для каждого спрайта вы должны создать новое действие. Поэтому вы должны создать действие внутри цикла.

void BasicElement::fadeTo(int opacity, float duration){ 

CCArray* pChildren = this->getChildren(); 
if (pChildren && pChildren->count() > 0) 
{ 
    CCObject* pObject = NULL; 
    CCARRAY_FOREACH(pChildren, pObject) 
    { 
     CCSprite* pChild = (CCSprite*) pObject; 
     pChild->stopAllActions(); 

     //Create the action here 
     CCActionInterval* actionTo = CCFadeTo::create(duration, opacity); 

     pChild->runAction(actionTo); 
    } 
} 

}

+0

Это делает так много смысла, как, черт возьми, не я получить там ?! – sendoushi

+0

Хотя это часть проблемы. Есть еще одна проблема, так как я не могу делать getChildren() один за другим – sendoushi