0

在我的 Cocos2D 应用程序中,我有一个包含所有游戏对象的精灵表。在 CCLayer 类的 init 方法中,我这样做:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Objects.plist"];
objectsSheet = [CCSpriteBatchNode batchNodeWithFile:@"Objects.pvr.ccz"];
[self addChild:objectsSheet];

我像这样创建我的主角精灵:

mySprite = [[CCSprite spriteWithSpriteFrameName:@"MainImage.png"] retain];

它加载良好。当角色在我离开视图之前死亡时,我会这样做:

CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache];
CCSpriteFrame* frame = [cache spriteFrameByName:@"NewImage.png"];
[mySprite setDisplayFrame:frame];

这甚至效果很好。现在我离开视图,然后我回到游戏视图。

所以现在我必须将角色图像改回其原始图像,所以我这样做:

[mySprite setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"MainImage.png"]];

但是发生了一些奇怪的事情,mySprite 只是空白,上面的最后一个代码肯定会被调用但没有做任何事情。奇怪的是,如果我将它加载到在我切换回游戏视图后创建的新精灵中,我会看到图像。所以这与不记得旧图像或其他东西有关。

有谁知道为什么会发生这种情况或我该如何解决?

谢谢!

4

1 回答 1

1

返回游戏视图后检查

[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"MainImage.png"]

不是nil。帧可能会从 spriteframe 缓存中卸载

于 2012-09-05T10:23:17.220 回答