Как поменять образ CCSprite - PullRequest
6 голосов
/ 19 ноября 2011

У меня есть CCSprite, который инициализируется с помощью [CCSprite spriteWithSpriteFrameName:@"plist_file_key_here.png"].Я уже добавил все спрайты из моего plist-файла в CCSpriteFrameCache.Я попытался установить текстуру следующим образом:

CCSpriteFrame * frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:name];
NSAssert(frame.texture!=nil, @"frame.texture can't equal nil"); //this works fine
[sprite setTexture:frame.texture]; //doesn't cause a white square to appear, just doesn't switch the image.

Как я уже говорил в моих комментариях, это не работает.Я думаю, что это как-то связано с разницей между использованием [CCSprite spriteWithFile:] и [CCSprite spriteWithSpriteFrameName:], которая опирается на спрайт-фреймы, загруженные в CCSpriteFrameCache из текстурного атласа.При использовании спрайтов, загруженных из текстурного атласа, текстура каждого спрайта равна текстуре листа спрайта.Есть ли способ обойти это или я должен удалить и воссоздать спрайт?Если это мой единственный вариант, есть ли способ удалить ccnode из его родителя, но сохранить его потомки?

Ответы [ 3 ]

17 голосов
/ 19 ноября 2011

Справочник по API для спасения!

Если у вас есть текстура с рамкой спрайта, вам не нужно менять текстуру, но рамку спрайта использует спрайт.Что вы можете сделать следующим образом:

CCSpriteFrameCache* cache = [CCSpriteFrameCache sharedSpriteFrameCache];
CCSpriteFrame* frame = [cache spriteFrameByName:name];
sprite.displayFrame = frame;

в cocos2d v3 это должно быть:

sprite.spriteFrame = frame;
3 голосов
/ 19 ноября 2011

Чтобы изменить изображение CCSprite в виде анимации с интервалом в 1 секунду между каждым кадром:

CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache];

CCSpriteFrame *frame1 = [cache spriteFrameByName:[NSString stringWithFormat:@"plist_file_key_here1.png"]];               
CCSpriteFrame *frame2 = [cache spriteFrameByName:[NSString stringWithFormat:@"plist_file_key_here2.png"]];             

NSArray *animFrames = [NSArray arrayWithObjects:frame1, frame2, nil];

CCAnimation *animation = [CCAnimation animationWithFrames:animFrames delay:1.0f];
[originalSprite runAction:[CCAnimate actionWithAnimation:animation restoreOriginalFrame:NO]];
0 голосов
/ 09 мая 2016

Рассмотрим объект CCSprite с именем mySprite.Теперь вы можете изменить изображение спрайта следующим образом:

[mySprite setTexture:[[CCTextureCache sharedTextureCache] addImage:[Tools imageNameForName:"myNewImage.png"]]];

Это изменит изображение объекта CCSprite mySprite на myNewImage.png

Примечание. Если изображение, которое нужно изменить, этов любой конкретной папке ресурсов вы можете оценить это изображение, используя весь путь к изображению.

...