Cocos2d-x CCSprite->setDisplayFrame AccessViolation crash

Cocos2d-x CCSprite->setDisplayFrame AccessViolation crash

本文关键字:setDisplayFrame AccessViolation crash gt CCSprite- Cocos2d-x      更新时间:2023-10-16

到目前为止,我可以追踪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);

我实在想不出好主意了,请大家帮帮我。

确保图像存在于缓存中。如果不存在,那么首先加载spriteframe到缓存。在更改显示框架之前,还可以将mBackground[0]添加到parent。

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