Обновление CCTexture2D из BatchNode
После того, как я закончил тестирование, я переместил свои изображения в таблицу спрайтов.
Я загрузил batchnode с соответствующими файлами, и мои изображения загружаются просто отлично.
Но я сталкиваюсь с проблемой замены текстур. Когда изображения были отдельными файлами, проблем не было. Теперь кажется, что CCTexture2d не нравится мой лист спрайтов.
У меня есть объекты, хранящиеся в многомерном массиве, поэтому я могу быстро пробежаться по ним и обновить их изображение.
Вот что я сделал, когда это сработало:
CCTexture2D* tex = [[CCTextureCache sharedTextureCache] addImage:@"alt-image.png"];
[((MyFunObject*)[[myFunObject2DArr objectAtIndex:j]objectAtIndex:i])->img setTexture: tex];
Вот что я делаю сейчас:
CCTexture2D* tex = [[CCTextureCache sharedTextureCache] addImage:[CCSprite spriteWithSpriteFrameName:@"alt-image.png"]];
[((MyFunObject*)[[myFunObject2DArr objectAtIndex:j]objectAtIndex:i])->img setTexture: tex];
MyFunObject является подклассом CCSprite
и имеет CCSprite
свойство img, которое установлено. Я бегу по массиву, нахожу похожие объекты и заменяю их изображение новым изображением "alt-image.png".
Кажется простым, но за пределами спрайт-листа это работало безупречно.
Может кто-нибудь сказать мне, что я делаю не так?
1 ответ
ОБНОВЛЕНИЕ: ЗДЕСЬ РЕШЕНИЕ ДЛЯ ЛЮБОГО В БУДУЩЕМ, КОТОРЫЙ ЭТО ПРОБЛЕМА
Вы не можете изменить текстуру спрайтов, если речь идет о спрайте. (Хлопнул меня по голове) Вы можете изменить только тот прямоугольник, который просматриваете.
Вот как вы это делаете:
[((MyFunObject*)[[myFunObject2DArr objectAtIndex:j]objectAtIndex:i])->img setTextureRect:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: @"alt-image.png" ].rect];
Обратите внимание, что я изменился setTexture
в setTextureRect
Затем я вызвал прямоугольник SpriteFrame в качестве аргумента.
Наслаждаться.