如何使用sprite WithSpriteFrameName更改由纹理Atlas图像制作的精灵中的图像

时间:2012-02-22 05:57:35

标签: cocos2d-iphone box2d texturepacker

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

感谢

2 个答案:

答案 0 :(得分:4)

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

-(void) setDisplayFrameNamed:(NSString*)name
{
    [self setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:name]];
}

如果您使用的是box2d,还可以使用GBox2D 这在MonkeyJump Tutorial

中有详细描述

答案 1 :(得分:0)

理想的解决方案是不要切换精灵的纹理,如果你可以避免它。第二好的是通过Spriteframe更改纹理(请注意,这排除了使用CCSpriteBatchNode)。

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