使用CCTextureCache设置粒子的纹理

Mac*_*rse 3 iphone cocos2d-iphone particle-system zwoptex

我正在迈出第一步cocos2d-iphone.

我在用:

CCSpriteFrameCache *frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
[frameCache addSpriteFramesWithFile:@"textures.plist"];
Run Code Online (Sandbox Code Playgroud)

使用我的zwoptex文件.有了这个集合,我正在CCSprites使用frameCache这样的创建:

[CCSprite spriteWithSpriteFrameName:@"filename.png"];
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在我正在创建自己的粒子系统,我需要设置纹理.我从zwoptex读取是有意义的,但我找不到办法做到这一点.我还检查了示例,他们做了类似的事情:

emitter.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.pvr"];
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 如果我要拥有的不仅仅是具有不同纹理的粒子系统.我应该用它们创建一个zwoptext吗?如果是这样,怎么样?
  • 为什么这些例子[[CCTextureCache sharedTextureCache] addImage: @"file"];呢?这是因为它没有被添加两次?

编辑:我刚刚在cocos2d的论坛上发布了这个.

Kaz*_*oto 6

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

纹理表可能会提高渲染性能,因为它不会改变OpenGL ES状态(绑定纹理).请查看" 如何使用Texture Packer和Pixel格式在Cocos2D中创建和优化Sprite表 ".我强烈建议您使用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);
...
Run Code Online (Sandbox Code Playgroud)