在我的 Cocos2D 应用程序中,我有一个包含所有游戏对象的 Sprite 表。在 CCLayer 类的 init 方法中我这样做:
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Objects.plist"];
objectsSheet = [CCSpriteBatchNode batchNodeWithFile:@"Objects.pvr.ccz"];
[self addChild:objectsSheet];
我像这样创建我的主角 Sprite :
mySprite = [[CCSprite spriteWithSpriteFrameName:@"MainImage.png"] retain];
而且加载效果很好。当角色死亡之前时,我会执行以下操作:
CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache];
CCSpriteFrame* frame = [cache spriteFrameByName:@"NewImage.png"];
[mySprite setDisplayFrame:frame];
这甚至效果很好。现在我离开 View ,稍后我返回游戏 View 。
所以现在我必须将角色图像更改回其原始图像,所以我这样做:
[mySprite setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"MainImage.png"]];
但是发生了一些奇怪的事情,mySprite 只是空白,上面的最后一个代码肯定会被调用,但不会执行任何操作。奇怪的是,如果我将其加载到切换回游戏 View 后创建的新 Sprite 中,我会看到该图像。所以这与旧图像没有被记住或其他什么有关。
有谁知道为什么会发生这种情况或者我该如何解决这个问题?
谢谢!
最佳答案
返回游戏 View 后检查
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"MainImage.png"]
不是nil
。帧可能会从 spriteframe 缓存中卸载
关于ios - Cocos2D setDisplayFrame View 更改后不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272724/