改变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"]];