Установка текстуры частицы с помощью CCTextureCache - PullRequest
3 голосов
/ 15 апреля 2011

Я делаю свои первые шаги с cocos2d-iphone.

Я использую:

CCSpriteFrameCache *frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
[frameCache addSpriteFramesWithFile:@"textures.plist"];

, чтобы использовать мой файл zwoptex.С этим набором я создаю свой CCSprites, используя frameCache, например:

[CCSprite spriteWithSpriteFrameName:@"filename.png"];

Пока все хорошо.Сейчас я создаю свою собственную систему частиц, и мне нужно установить текстуру.Я догадываюсь было бы целесообразно читать с zwoptex, но я не мог найти способ сделать это.Я также проверил примеры, и они сделали что-то вроде:

emitter.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.pvr"];

Итак, мои вопросы:

  • Если у меня будет больше, чем система частиц с различными текстурами.Должен ли я создать zwoptext с ними?Если да, то как?
  • Почему примеры делают [[CCTextureCache sharedTextureCache] addImage: @"file"];?это потому что он не добавляется два раза?

РЕДАКТИРОВАТЬ: Я только что опубликовал это на форуме cocos2d .

1 Ответ

6 голосов
/ 15 апреля 2011

Если у меня будет больше, чем система частиц с разными текстурами.Должен ли я создать zwoptext с ними?Если да, то как?

Лист текстуры может улучшить производительность рендеринга, поскольку он не изменит состояние OpenGL ES (связывание текстур).Пожалуйста, ознакомьтесь с " Как создавать и оптимизировать листы спрайтов в Cocos2D с помощью упаковщика текстур и форматов пикселей ".Я настоятельно рекомендую вам использовать TexturePacker для создания листов текстуры.

Почему примеры делают [[CCTextureCache sharedTextureCache] addImage: @ "file"] ;?это потому что он не добавляется два раза?

Его легко использовать для загрузки текстуры OpenGL.Вы не должны использовать OpenGL ES API, например, glTexImage2D или другие.Также, конечно, CCTextureCache всегда кэширует текстуры.Он немедленно возвращает экземпляр CCTexture2D, если указанный файл уже кэширован.

РЕДАКТИРОВАТЬ:

Вы можете получить экземпляр CCTexture2D из CCSpriteFrameCache с помощью zwoptext plist.

CCSpriteFrameCache *frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
[frameCache addSpriteFramesWithFile:@"textures.plist"];

CCSpriteFrame *frameFire = [frameCache spriteFrameByName:@"particle_fire"];
CCTexture2D *texFire = frameFire.texture;
...
glBindTexture(GL_TEXTURE_2D, texFire.name);
/* You may need to use frameFire.rectInPixels and frameFire.rotated for the texture coordinates. */
...

CCSpriteFrame *frameWater = [frameCache spriteFrameByName:@"particle_water"];
CCTexture2D *texWater = frameWater.texture;
...
glBindTexture(GL_TEXTURE_2D, texWater.name);
...
...