我有一个使用[CCSprite spriteWithSpriteFrameName:@"plist_file_key_here.png"]
初始化的CCSprite。我已经将我的plist文件中的所有 Sprite 添加到CCSpriteFrameCache中。我尝试过像这样设置纹理:
CCSpriteFrame * frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:name];
NSAssert(frame.texture!=nil, @"frame.texture can't equal nil"); //this works fine
[sprite setTexture:frame.texture]; //doesn't cause a white square to appear, just doesn't switch the image.
正如我在评论中所说,这是行不通的。我认为这与使用
[CCSprite spriteWithFile:]
和[CCSprite spriteWithSpriteFrameName:]
之间的区别有关,后者依赖于从纹理图集加载到CCSpriteFrameCache中的子画面帧。使用从纹理图集加载的 Sprite 时,每个 Sprite 的纹理都等于 Sprite 表的纹理。有什么办法解决还是我必须删除并重新创建 Sprite ?如果那是我唯一的选择,是否有办法从其父级删除ccnode但保留其子级? 最佳答案
The API Reference to rescue!
当您具有带有sprite框架的纹理时,您不想更改纹理,而是要更改sprite使用的sprite框架。您可以执行以下操作:
CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache];
CCSpriteFrame* frame = [cache spriteFrameByName:name];
sprite.displayFrame = frame;
在cocos2d v3中,它必须为:
sprite.spriteFrame = frame;