我使用spriteWithFile创建了许多CCSprit。
如何在运行时更改精灵的图像?
我需要定期更改一些精灵图像。
答案 0 :(得分:59)
CCTexture *tex = [CCTexture textureWithFile:fileName];
self.texture = tex;
答案 1 :(得分:14)
如果您使用SpriteSheets,这将有效。
NSString* newSprite = [NSString stringWithString:@"SPRITE_NAME.png"];
CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache];
[sprite setDisplayFrame:[cache spriteFrameByName:newSprite]];
答案 2 :(得分:9)
[yourSprite setTexture:[[CCSprite spriteWithFile:@"yourImage.png"]texture]];
答案 3 :(得分:4)
在COCOS2D-X中,您可以通过以下方式执行此操作
CCTexture2D *tex = CCTextureCache::sharedTextureCache()->addImage("xyz.png");
sprit_name->setTexture(tex);
如果你想改变它的尺寸,那么也写下这条线
sprit_name->setTextureRect(CCRectMake(0,0, tex->getContentSize().width, tex->getContentSize().height));
答案 4 :(得分:1)
我在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") );
答案 5 :(得分:1)
对于使用Cocos2d-iPhone v 3.0.0或更高版本的用户
demonSprite.texture = [[CCSprite spriteWithImageNamed:@"steelDemonNormal.png"] texture];
答案 6 :(得分:0)
如果您正在使用SpriteSheets,那么这将起作用
CCSpriteBatchNode *batch;
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFrameWithFile:@"file.plist"];
batch = [[[CCSpriteBatchNode alloc] initWithFile:@"file.png"] capacity:50] autorelease];
[self addChild:batch];
答案 7 :(得分:0)
尝试为你的游戏使用地图纹理,因为你使用相同的精灵也有许多实例
使用
CCSpriteFrameCache,CCSpriteBatchNode
因此,您可以使用单个纹理中的更多不同纹理来优化纹理缓存。并且所有都在一个节点中进行批处理。这也减少了绘制调用的数量,并提高了帧速率。
尝试使用
[[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创建2D纹理atlasses
希望这有帮助
祝你好运答案 8 :(得分:0)
如果要连续更改图像,请在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];
答案 9 :(得分:0)
你需要以这种方式制作一个cctexture2d对象
CCTexture2D * newtexture = [[CCTextureCache sharedTextureCache] addImage:@" new-texture"]; [mainSprite setTexture:newtexture];
如果你想改变精灵图像纹理运行时间,这是一件需要完成的事情。
答案 10 :(得分:0)
您只需要在运行时更改CCSprite的纹理,就像这样。
[aSprite setTexture:[[CCTextureCache sharedTextureCache] addImage:@"NewImage.png"]];