3

我正在迈出第一步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 的论坛上发布了这个。

4

1 回答 1

6

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

纹理表可能会提高渲染性能,因为它不会改变 OpenGL ES 状态(绑定纹理)。请看“如何在 Cocos2D 中使用 Texture Packer 和 Pixel Formats 创建和优化 Sprite Sheets ”。我强烈建议您使用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);
...
于 2011-04-14T21:54:00.893 回答