игра cocos2d, структура системы ccparticle испортилась - PullRequest
1 голос
/ 02 февраля 2012

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

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

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

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

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

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

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

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

1 Ответ

3 голосов
/ 02 февраля 2012

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

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

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

[rain setTexture: [[CCTextureCache sharedTextureCache] addImage:"particleTexture.png"]];
...