cocos2d-iphone - 如何切换 CCSprite 的图像

标签 cocos2d-iphone ccsprite texture2d

我有一个使用 [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 表的纹理。有什么办法可以解决这个问题,还是我必须删除并重新创建 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;

关于cocos2d-iphone - 如何切换 CCSprite 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190365/

相关文章:

ios - Cocos2d : Invert a texture, 显示镜像?

c++ - 在 CUDA 上需要有关 2D 纹理的帮助。没有得到我想要的索引的预期值

cocos2d-iphone - Cocos2d 最佳实践

iphone - 使用 cocos2d 处理 CCSprite 触摸的最佳实践

iphone - 如何使用 cocos2d 淡入/淡出 UIKit 元素 (UItextField)

ios - CCSprite 的父类(super class)

c++ - COCOS 2dx无法获取touches?

xcode - Cocos2d Spritesheet 未加载(spriteWithSpriteFrameName)

javascript - 任意方向切片 3D 数组以生成纹理

ios - 在 cocos2d-iphone 中制作启动画面动画?