CCFiniteTimeAction :: getDuration () EXC_BAD_ACCESS при создании CCSequence

Я смог запустить этот код без ошибки на симуляторе iPhone. Однако, когда я запускаю его на своем iPhone, я получаю сообщение об ошибке EXC_BAD_ACCESS. Вот код:

        CCAnimate * explosionAnimate = CCAnimate::create(explosionAnimation);
CCCallFuncN * callFuncN = CCCallFuncN::create(this,callfuncN_selector(GameLayer::removeChildFromParent));
CCFiniteTimeAction * explosionSequence = CCSequence::create(explosionAnimate, callFuncN);

CCSprite * explosionSprite = CCSprite::createWithSpriteFrameName("explosion_frame_1");
addChild(explosionSprite);

explosionSprite->setPosition(point);
explosionSprite->runAction(explosionSequence);
}

void GameLayer::removeChildFromParent(CCNode * child)
{
child->removeFromParent();
}

Ошибка возникает при вызове CCSequence :: create (…). Отладка через CCSequence :: create (…)

CCFiniteTimeAction* CCSequence::create(CCFiniteTimeAction *pAction1, va_list args)
{
CCFiniteTimeAction *pNow;
CCFiniteTimeAction *pPrev = pAction1;

while (pAction1)
{
pNow = va_arg(args, CCFiniteTimeAction*);
if (pNow)
{
pPrev = createWithTwoActions(pPrev, pNow);
}
else
{
break;
}
}

return pPrev;
}

Я вижу, что «createWithTwoActions» get вызывается дважды. Это не кажется правильным. На 2-й вызов «createWithTwoActions». Ошибка возникает в CCFiniteTimeAction, в частности, во встроенной функции getDuration ():

inline float getDuration(void) { return m_fDuration; }

Есть идеи, почему это происходит?

0

Решение

Я смог решить проблему, вызвав CCSequence :: create (), например:

CCSequence::create(explosionAnimate, callFuncN, NULL);

вместо:

CCSequence::create(explosionAnimate, callFuncN);

Я предполагаю, что это связано с природой указателей CCFiniteAction и аргументов переменной длины C ++.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector