2011-04-14 56 views
3

我正在使用cocos2d-iphone开始我的第一步。使用CCTextureCache设置粒子的纹理

我使用:

CCSpriteFrameCache *frameCache = [CCSpriteFrameCache sharedSpriteFrameCache]; 
[frameCache addSpriteFramesWithFile:@"textures.plist"]; 

用我zwoptex文件。有了这一套,我现在用的是frameCache这样创建我CCSprites

[CCSprite spriteWithSpriteFrameName:@"filename.png"]; 

到目前为止,一切都很好。现在我正在创建自己的粒子系统,我需要设置纹理。我想从zwoptex读取它是有意义的,但我找不到办法做到这一点。 我还检查了的例子,他们这样做:

emitter.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.pvr"]; 

所以我的问题是:

  • 如果我将不得不比不同质地的粒子系统等等。我应该用它们创建一个zwoptext吗?如果是这样,怎么样?
  • 为什么这些例子是[[CCTextureCache sharedTextureCache] addImage: @"file"];?这是因为它没有添加两次?

编辑: 我刚在cocos2d's forum发表了这个。

+0

从我的理解,PVR纹理来说不是最佳的2D情况下,你应该反思的代码位的指出TexturePacker – arclight 2011-04-14 21:22:55

回答

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纹理。您不能使用OpenGL ES API,例如glTexImage2D等。当然,CCTextureCache总是缓存纹理。如果指定的文件已被缓存,它立即返回CCTexture2D实例。

编辑:

您可以从CCSpriteFrameCache得到CCTexture2D实例与zwoptext的plist。

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

谢谢,但我使用zwoptex。与教程的链接没有提到如何从纹理表中获取纹理。 – Macarse 2011-04-15 11:32:41

+0

好吧,我更新了我的答案。 – 2011-04-15 13:45:58

+0

很酷,谢谢。几乎在那里,但'frameFire.texture'指的是大质地,而不是“裁剪”一个。 – Macarse 2011-04-15 16:54:50