cocos2d游戏,ccparticle系统纹理搞砸了

时间:2012-02-02 09:44:48

标签: iphone ios cocos2d-iphone particles

我的游戏使用了几个粒子系统。每次我使用第一个粒子系统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,但仍然存在同样的问题。

1 个答案:

答案 0 :(得分:3)

如果纹理数据嵌入在.plist文件中,cocos2d将提取该数据并在内部将其存储为纹理。纹理以纹理文件名作为键存储,因此如果您有两个内部使用相同纹理文件名的粒子系统,则首先加载的纹理将应用于所有后续使用相同的纹理文件名!

检查此问题的简便方法是查看.plist文件并搜索textureFileName密钥。每个纹理的键应该不同。由于图像数据嵌入在.plist文件中,因此您可以将此值更改为您想要的任何值。例如。 starparticle.png代表您的星星,rainparticle.png代表雨水等。只需使用独特的每种独特纹理。

如果失败,您仍然可以通过从以下文件中加载纹理来手动应用纹理:

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