使用CC TextureCache设置粒子的纹理

时间:2011-04-14 21:20:59

标签: iphone cocos2d-iphone particle-system zwoptex

我的第一步是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's forum

1 个答案:

答案 0 :(得分:6)

  

如果我要拥有的不仅仅是具有不同纹理的粒子系统。我应该用它们创建一个zwoptext吗?如果是这样,怎么样?

纹理表可能会提高渲染性能,因为它不会改变OpenGL ES状态(绑定纹理)。请看一下“How to Create and Optimize Sprite Sheets in Cocos2D with Texture Packer and Pixel Formats”。我强烈建议您使用TexturePacker创建纹理表。

  

为什么这些例子做[[CCTextureCache sharedTextureCache] addImage:@“file”];?这是因为它没有被添加两次?

它很容易用于加载OpenGL纹理。您不能使用诸如glTexImage2D等OpenGL ES API。当然,CCTextureCache总是缓存纹理。如果指定的文件已经被缓存,它会立即返回CCTexture2D实例。

修改

您可以使用zwoptext plist从CCSpriteFrameCache获取CCTexture2D实例。

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);
...