Cocos2d-x CCSprite-> setDisplayFrame AccessViolation崩溃

时间:2013-04-11 09:18:46

标签: c++ cocos2d-iphone cocos2d-x

到目前为止,我可以追踪我在cocos2dx应用程序中遇到的每一个错误/崩溃,但现在我觉得自己很蠢。 我有一个CCSprite指针数组,我想要做的是当玩家有x分数时从缓存中更改它的显示帧。

从plist文件中读取所有精灵帧,并且精灵在那里工作,因为在尝试切换到新帧之前我可以毫无问题地看到它。 “background.png”是一个有效的精灵帧名称,因为我用它来创建有效的精灵。

此行正常(或至少看起来有效)

CCSpriteFrame* frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("background.png");

问题在于这一行:

for (int c = 0; c < sizeof(mBackground) / sizeof(CCSprite*); c++){
    mBackground[c]->setDisplayFrame(frame);
} 

这个也崩溃了:

CCSpriteFrame* frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("background.png");
mBackground[0]->setDisplayFrame(frame);

我没有想法,我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:2)

确保缓存中存在图像。如果不存在,则首先加载spriteframe进行缓存。在更改显示框架之前,还要将mBackground [0]添加到父级。

if(mBackground[0] && frame)
{
    mBackground[0]->setDisplayFrame(frame);
}