改变CCSprite的图像

我已经使用spriteWithFile创build了许多CCSprites。

如何在运行时更改精灵的图像?

我需要定期更改一些精灵图片。

CCTexture *tex = [CCTexture textureWithFile:fileName]; self.texture = tex; 

如果你正在使用SpriteSheets,这将工作。

 NSString* newSprite = [NSString stringWithString:@"SPRITE_NAME.png"]; CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache]; [sprite setDisplayFrame:[cache spriteFrameByName:newSprite]]; 
 [yourSprite setTexture:[[CCSprite spriteWithFile:@"yourImage.png"]texture]]; 

在COCOS2D-X中,您可以通过以下方式来完成此操作

 CCTexture2D *tex = CCTextureCache::sharedTextureCache()->addImage("xyz.png"); sprit_name->setTexture(tex); 

如果你想改变SPRITE SIZE,那么也写这行

 sprit_name->setTextureRect(CCRectMake(0,0, tex->getContentSize().width, tex->getContentSize().height)); 

我在c ++中编写cocos2D-x:当你使用spriteSheet而不是使用单个文件时,你应该使用这个方法。 假设你在主图层中添加你的spriteSheet。

 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("sprite_sheet.plist"); _gameBatchNode = CCSpriteBatchNode::create("sprite_sheet.png", 200); this->addChild(_gameBatchNode, kMiddleground); 

kMiddleground只是一个定义的整数。

那么我想改变已经有名为“cloud.png”的精灵的图片,我使用这个代码来做到这一点:

 cloud->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("blackCloud.png") ); 

对于那些正在使用Cocos2d-iPhone v 3.0.0或更高版本的用户

 demonSprite.texture = [[CCSprite spriteWithImageNamed:@"steelDemonNormal.png"] texture]; 

如果您正在使用SpriteSheets,那么这将工作

 CCSpriteBatchNode *batch; [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFrameWithFile:@"file.plist"]; batch = [[[CCSpriteBatchNode alloc] initWithFile:@"file.png"] capacity:50] autorelease]; [self addChild:batch]; 

尝试使用游戏纹理为你的游戏,因为你使用相同的精灵也是许多实例

使用

CCSpriteFrameCache,CCSpriteBatchNode

因此,您可以使用单一纹理中的更多不同纹理优化纹理caching。 而且所有这些都是在一个节点中进行的。 这也减less了平局的呼叫次数,并增加了帧率。

尝试使用

  [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Characters.plist"]; CCSpriteBatchNode* batch = [CCSpriteBatchNode batchNodeWithFile:@"Characters.png" capacity:10]; [self addChild:batch]; CCSprite* player1 = [CCSprite spriteWithSpriteFrameName:@"Luce.png"]; player1.position = ccp(winSize.width * 0.2, winSize.height * 0.8); [batch addChild:player1]; 

并使用

  CCSprite* player = nil; CCARRAY_FOREACH(batch.children, player1) { // some computational code and condition if (sonecondition) { [player1 setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"spriteframename.png"]]; } } 

在更新或代码的其他部分

使用Zwoptex

TexturePacker创build2D纹理

希望这可以帮助

祝你好运

如果你想不断改变图像,那么在你的init方法中写下下面的代码

CCTexture2D *tex1 = [[CCTextureCache sharedTextureCache] addImage:@"image1.png"]; CCTexture2D *tex2 = [[CCTextureCache sharedTextureCache] addImage:@"image2.png"]; CCTexture2D *tex3 = [[CCTextureCache sharedTextureCache] addImage:@"image3.png"]; CCSprite *sprite = [CCSprite spriteWithTexture:tex1]; //Make above variables as class level to access in whole class [self addChild:sprite]; //position the sprite according to your need

把这一行写在你想改变图像的地方

[sprite setTexture:tex3];

您需要以这种方式创build一个cctexture2d对象

CCTexture2D * newtexture = [[CCTextureCache sharedTextureCache] addImage:@“new-texture”]; [mainSprite setTexture:newtexture];

如果你想改变精灵图像纹理运行时间,这是一个需要完成的事情。

你只需要像这样在运行时改变CCSprite的纹理。

 [aSprite setTexture:[[CCTextureCache sharedTextureCache] addImage:@"NewImage.png"]];