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」が 2 回呼び出されていることがわかります。それは正しくないようです。「createWithTwoActions」への 2 回目の呼び出し。エラーは CCFiniteTimeAction 内、特に getDuration() インライン関数で発生します。
inline float getDuration(void) { return m_fDuration; }
なぜこれが発生するのでしょうか?