2011-09-17 60 views
0

我正在製作這樣的箭頭射擊遊戲。一切都很好。但我意識到如果我畫線跟蹤我的箭頭,這將是偉大的。所以我在我的調度程序中放置了一些代碼,這些代碼應該在箭頭所在的位置繪製圓圈。但是我必須畫出這麼多圈,所以當我拍攝多箭時,遊戲畫面並不好。如何繪製很多CCSprite而沒有性能下降?

還有其他更好的方法嗎?我已經使用CCSpriteBatchNode,plist,CCSpriteFrameCache。我盡我所能。我需要幫助,感謝這麼多

這是我的代碼

............... 
    [self schedule:@selector(CollisionDetection:)]; 
} 


- (void)CollisionDetection:(ccTime)dt 
{ 
    for (CCSprite *arrow in arrows->arrowsArray) 
    { 
      CCSprite *track = [CCSprite spriteWithSpriteFrameName:@"WhiteCircle.png"]; 
      [track setPosition:arrow.position]; 
      [arrows->rootLayer->arrowsSheet addChild:track]; 

      id delete = [CCFadeOut actionWithDuration:1.0]; 
      id deleteAction= [CCSequence actions:delete ,[CCCallFuncN actionWithTarget:self selector:@selector(spriteActionFinished:)], nil]; 
      [track runAction:deleteAction]; 
    .......  

回答

1

對象的分配是一個很大的開銷。如果你的遊戲運行緩慢,你應該考慮在遊戲開始時創建一個箭頭池,並且只在你需要時立即觸發它。如果它不再可見,只需將其設置爲非活動狀態,並在下次需要箭頭時重新使用它。

+0

啊哈,我明白了。我明白了。謝謝你:) –

+0

那麼你會很高興接受答案:) –

+0

我做到了。謝謝:) –

0

聽起來像你的問題不是箭頭,但我想象的圓圈也是科科斯物體。你最好學習如何使用opengl命令而不是對象將圓形紋理直接繪製到屏幕上。這會有很大的幫助。

+0

真的嗎?你認爲它會工作?我認爲同樣的事情。但我想知道如果使用opengl API進行繪製,這會如何變得更好。你認爲CCSprite和opengl的區別很大? –

+0

開銷很少。每個圓都沒有創建對象,只是在Y座標處繪製X紋理。請記住,CCSprite最終會調用opengl來繪製自己。你只是剪掉沉重的中間人。另外,回顧一下你的代碼,你正在爲每一幀創建你的圈子。那很糟。 –

+0

謝謝,但我不能放棄CCSprite的令人難以置信的功能!像一個FadeOut,但無論如何感謝。 –

0

當有時間關鍵動畫時,我保持CCCallFunc(N)清除,因爲它可以使調度程序停頓很長時間。當我讀取你的代碼時,你在每個預定的時間間隔都有一個CallFunc ......嗯。您是否嘗試過在沒有調度程序的情況下運行這個程序,即一次只用一個CallFunc封裝並啓動所有動畫?作爲預定時間間隔的一部分,不要改變位置,而應使用CCMoveTo,它將與跟蹤動畫同時運行。

+0

嗯有道理:)謝謝我會解決它。 –

+0

我的榮幸。如果它適合你,你知道如何接受答案:)與你的產品祝你好運。 – YvesLeBorg