2011-04-14 27 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