2011-01-25 51 views
1

背景:我使用了cocos2d-iphone開發遊戲爲iPhone/iPad的。我們的引擎爲關卡設計者提供了通過在.plist文件中定義諸如速度,人工智能,武器和主要精靈紋理等屬性來創建新的壞人的能力。在cocos2d-iphone中複製或創建CCNode遊戲對象的最快方法是?

問題:目前,我們建立的所有原型的一個NSDictionary水平開始之前。對於每個實體,我們存儲一個類名和一個NSDictionary,描述構建此實體的新實例所需的參數。我們在加載時創建每個原型的實例,以預緩存紋理,但立即銷燬它。當一個新的壞人產生時,我們使用存儲的NSDictionary並將其傳遞給init方法(爲了簡潔起見,我們將其刪除了錯誤檢查);現在

IKPrototype* prototype = [prototypes objectForKey:prototypeID]; 
IKBaseEntity* entity = [[[NSClassFromString([prototype prototypeClass]) alloc] init] autorelease]; 
[entity setPrototypeID:prototypeID]; 
[entity parseParameters:[prototype parameters]]; 
return entity; 

,這部作品一種享受 - 但在同一幀造就了一批子彈造成明顯減慢(一兩幀丟棄)作爲引擎解析參數(有時是20-30值)。但是,它們每次都基本相同,只有在添加到世界後纔會發生變化(稍後會發生)。

問題:什麼是最有效的方法來存儲一個原型對象,以便以後重複產生。序列化/反序列化是否可以與CCNode的子類一起工作,它會比我所做的更快嗎?將最終對象的副本存儲在我的原型類中,然後對該對象進行「深拷貝」以產卵是否更好?如果我這樣做,我是否會擔心CCTexture引用?請簡要說明提出解決方案的必要步驟。

一直在努力想解決這個問題了,而最有效的方法。我想知道是否有一種我沒有想到的方法可能會更好?感謝您閱讀這些。

回答

1

我採取的一種方法是在第一次加載資源時(比如在init中)預先創建一堆對象,在運行時只需更改其中一個資源就可以選擇其中一個資源參數並將其從一個非活動對象數組移動到活動對象。

你可能沒有創造出足夠的,當然,但如果這些對象共享紋理,等等,那麼你可能想創建它們作爲CCBatchNode成員無論如何,使其更有效地吸引很多人。

+0

對我的情況來說這是一個絕妙的主意 - 謝謝。我們可以準確預測90%左右的原型中每一個會同時出現在關卡上並在關卡文件中進行定義。然後,只有需要更多 - 我們可以即時創建它們。我現在需要寫的是我的實體基類中的一個「重置」方法,當它再次從隊列中拉出時,它會恢復生命。 – 2011-02-03 09:17:46

相關問題