更改CCSprite的图像

时间:2011-08-01 08:48:55

标签: cocos2d-iphone

我使用spriteWithFile创建了许多CCSprit。

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

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

11 个答案:

答案 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"]];