我的第一步是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"];
所以我的问题是:
[[CCTextureCache sharedTextureCache] addImage: @"file"];
?这是因为它没有被添加两次?编辑: 我刚刚将其发布在cocos2d's forum。
中答案 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);
...