Cocos2d iphone 如何使用SpriteWithPriteFrameName更改由textureAtlas图像制作的精灵中的图像

Cocos2d iphone 如何使用SpriteWithPriteFrameName更改由textureAtlas图像制作的精灵中的图像,cocos2d-iphone,box2d,texturepacker,Cocos2d Iphone,Box2d,Texturepacker,我有一个带有Box2D(和Kobold2D)的cocos2d iOS应用程序;我在一个层中有一个由18个CCSprite组成的数组。它们现在使用SpriteWithPriteFrameName和textureAtlas(谢谢texturePacker)创建。当我想更新18个精灵时,我想我可以a)更改图像(但我不知道怎么做——我看到了对setDisplayFrame的引用,但我需要使用SpriteWithPriteFrameName从批处理节点/纹理图集获取图像)或者b)用addChild销毁我之

我有一个带有Box2D(和Kobold2D)的cocos2d iOS应用程序;我在一个层中有一个由18个CCSprite组成的数组。它们现在使用SpriteWithPriteFrameName和textureAtlas(谢谢texturePacker)创建。当我想更新18个精灵时,我想我可以a)更改图像(但我不知道怎么做——我看到了对setDisplayFrame的引用,但我需要使用SpriteWithPriteFrameName从批处理节点/纹理图集获取图像)或者b)用addChild销毁我之前创建并添加到图层中的精灵,然后在它的位置创建一个新的精灵(18个精灵,在一个“游戏”中16次)。在资源使用和性能方面,首选哪种方法?看起来像一个),但再一次,我不知道该怎么做


谢谢

您可以添加以下代码作为CCSprite的扩展:

-(void) setDisplayFrameNamed:(NSString*)name
{
    [self setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:name]];
}
如果您使用的是box2d,也可以使用

中有详细描述,您可以将以下代码作为扩展添加到CCSprite:

-(void) setDisplayFrameNamed:(NSString*)name
{
    [self setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:name]];
}
如果您使用的是box2d,也可以使用
这在

中有详细描述,理想的解决方案是如果可以避免的话,根本不切换精灵的纹理。其次是通过Spriteframe更改纹理(请注意,这排除了使用CCSpriteBatchNode)


创建新精灵通常是对性能影响最大的操作。

理想的解决方案是,如果可以避免的话,根本不切换精灵的纹理。其次是通过Spriteframe更改纹理(请注意,这排除了使用CCSpriteBatchNode)

创建新精灵通常是对性能影响最大的操作