игра cocos2d, текстура системы ccparticle испорчена

моя игра использует несколько систем частиц. каждый раз, когда я использую первую систему частиц, например, stars.plist, следующая отображаемая частица будет использовать текстуру stars.plist. (поэтому, если следующей частицей будет дождь, то будет дождь из звезд :( Я использую частицу [ARCH_OPTIMAL_PARTICLE_SYSTEMWithFile: @""], например:

CCParticleSystem* rain = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"rain.plist"];
[self addChild:rain z:-1];

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

[ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"rain.plist"];

тогда, если моей следующей частицей для воспроизведения будет метеор.plist, используемая текстура по-прежнему будет текстурой rain.plist.

я использую тот же способ для отображения метеора:

    NSString* fn = [NSString stringWithFormat:@"meteor%i.plist", random];
    CCParticleSystem* meteor = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:fn];

Я пробовал CCParticleQuad и CCParticlePoint как в 3gs, так и в iPhone 4 и в симуляторе, но проблема осталась.


person OMGPOP    schedule 02.02.2012    source источник
comment
Как вы обеспечиваете текстуру? Он закодирован в файле .plist или это отдельный файл? У меня были подобные проблемы с текстурами, которые встроены в plist раньше, поэтому и спрашиваю.   -  person bummzack    schedule 02.02.2012
comment
то есть вы перешли на отдельные файлы и все заработало?   -  person OMGPOP    schedule 02.02.2012


Ответы (1)


Если данные текстуры встроены в файл .plist, cocos2d извлечет эти данные и сохранит их как текстуру внутри. Текстура хранится с именем файла текстуры в качестве ключа, поэтому, если у вас есть две системы частиц, которые используют одно и то же имя файла текстуры внутри, то текстура, которая была загружена первой, будет применяться для всех последующих применений то же имя файла текстуры!

Простой способ проверить это — просмотреть файл .plist и найти ключ textureFileName. Этот ключ должен быть разным для каждой текстуры. Поскольку данные изображения встроены в ваш файл .plist, вы можете изменить это значение на все, что хотите.. например. starparticle.png для ваших звезд, rainparticle.png для дождя и т. д. Просто используйте что-то уникальное для каждой уникальной текстуры.

Если это не поможет, вы все равно можете применить текстуру вручную, загрузив ее из такого файла:

[rain setTexture: [[CCTextureCache sharedTextureCache] addImage:"particleTexture.png"]];
person bummzack    schedule 02.02.2012
comment
некоторые из моих частиц используют (null).tiff как textureFileName. Что я должен делать? - person OMGPOP; 02.02.2012
comment
@ Let'sSpotIt просто отредактируйте файл и дайте каждой текстуре уникальное имя файла ... как я написал в своем ответе. Например. rainparticle.png для системы частиц дождя и starparticle.png для системы звездных частиц и т.д... - person bummzack; 02.02.2012
comment
Я все равно поменял, и все заработало. Интересно, почему дизайнер частиц установил для текстуры одно и то же имя. - person OMGPOP; 02.02.2012