我的游戏使用了几个粒子系统。每次我使用第一个粒子系统stars.plist时,下一个要显示的粒子将使用stars.plist的纹理。 (所以,如果下一个粒子下雨,那么将是一场星雨:( 我使用[ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@“”],如:
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];
我在3gs和iPhone 4以及模拟器中尝试过CCParticleQuad和CCParticlePoint,但仍然存在同样的问题。
答案 0 :(得分:3)
如果纹理数据嵌入在.plist
文件中,cocos2d将提取该数据并在内部将其存储为纹理。纹理以纹理文件名作为键存储,因此如果您有两个内部使用相同纹理文件名的粒子系统,则首先加载的纹理将应用于所有后续使用相同的纹理文件名!
检查此问题的简便方法是查看.plist
文件并搜索textureFileName
密钥。每个纹理的键应该不同。由于图像数据嵌入在.plist
文件中,因此您可以将此值更改为您想要的任何值。例如。 starparticle.png
代表您的星星,rainparticle.png
代表雨水等。只需使用独特的每种独特纹理。
如果失败,您仍然可以通过从以下文件中加载纹理来手动应用纹理:
[rain setTexture: [[CCTextureCache sharedTextureCache] addImage:"particleTexture.png"]];