Изменение изображения CCSprite - PullRequest
33 голосов
/ 01 августа 2011

Я создал несколько CCSprites, используя spriteWithFile.

Как изменить изображение для спрайта во время выполнения?

Мне нужно регулярно менять изображения нескольких спрайтов.

Ответы [ 11 ]

59 голосов
/ 01 августа 2011
CCTexture *tex = [CCTexture textureWithFile:fileName];
self.texture = tex;
14 голосов
/ 10 декабря 2012

Если вы используете SpriteSheets, это будет работать.

NSString* newSprite = [NSString stringWithString:@"SPRITE_NAME.png"];
CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache];
[sprite setDisplayFrame:[cache spriteFrameByName:newSprite]];
9 голосов
/ 26 июля 2012
[yourSprite setTexture:[[CCSprite spriteWithFile:@"yourImage.png"]texture]];
4 голосов
/ 12 декабря 2013

В 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));
1 голос
/ 07 августа 2014

Для тех, кто использует Cocos2d-iPhone v 3.0.0 или более поздней версии

demonSprite.texture = [[CCSprite spriteWithImageNamed:@"steelDemonNormal.png"] texture];
1 голос
/ 17 июля 2013

я кодирую cocos2D-x на c ++: когда вы используете spriteSheet вместо одного файла, вы должны использовать этот метод.Предположим, вы добавили свой spriteSheet в основной слой.

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

kMiddleground - это просто определенное целое число.

тогда я хочу изменить изображение спрайта, в котором уже есть спрайт с именем "облако".png "Я использую этот код для этого:

cloud->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("blackCloud.png") );
0 голосов
/ 04 июля 2014

Вам просто нужно изменить текстуру вашего CCSprite во время выполнения, как это.

[aSprite setTexture:[[CCTextureCache sharedTextureCache] addImage:@"NewImage.png"]];
0 голосов
/ 21 мая 2014

вам нужно сделать один объект cctexture2d таким образом

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

Это все, что нужно сделать, если вы хотите изменить время выполнения текстуры изображения спрайта.

0 голосов
/ 27 марта 2014

, если вы хотите непрерывно менять изображения, напишите следующий код в вашем методе инициализации

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];

0 голосов
/ 17 декабря 2013

Попробуйте использовать атласные текстуры для своей игры, потому что вы используете тот же спрайт, что и во многих случаях

Использование

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 текстурных очков

Надеюсь, это поможет

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...