2012-01-31 84 views
4

我有一個遊戲對象在兩個完全不同的地方處理。在Contact Listener中,我檢查一些條件,如果它們發生,我必須保存一個或多個複雜數據部分。所以我決定使用結構。例如:將結構寫入NSMutableArray

struct SomeStruct 
{ 
    int value1; 
    int value2; 
    CGPoint value3; 
    b2Vec2 value4; 
}; 

typedef SomeStruct SomeStruct; 

在遊戲場景中我的經歷,所有的遊戲對象,如果它在棧/數組不是空的,做一些東西並擦拭。

在Contact Listener中,它從頭開始重複。

由於嚴格的執行順序(必須在其他方法之後調用方法),我必須使用此體系結構。

我懷疑我需要的東西像vector或NSMutableArray(我認爲它不能用於結構),所以向量可能是唯一的方法。

但不明白如何實現它。你可以幫助我一些代碼/僞代碼或鏈接到書/文章,我可以找到解決方案嗎?

回答

2

這個問題有很多解決方案。

  1. 請勿使用struct。一個obj-c類與一個結構實際上是一樣的。
  2. 使用CFArrayCFArrayCreateMutable)並把它作爲指針。
  3. 在STL向量中使用C++類。
  4. 使用C數組(SomeStruct[])並在需要時增加其長度。
  5. 使用經典的堆棧實現,帶有鏈表(每個結構都有一個指向下一個值的指針)。
+0

是的,可能只有變量的Obj-C類會有所幫助,我會嘗試使用它。在這種情況下管理。 – maaboo 2012-01-31 12:57:35

+0

'malloc'和'free' :)沒有什麼複雜的。 – Sulthan 2012-01-31 13:43:59

3

可可提供NSValue類用於這一目的:

這將創建一個對象,你可以添加到NSMutableArray

NSValue *someObj = [NSValue valueWithBytes:&myStruct objCType:@encode(SomeStruct)]; 

您可以使用[someObj pointerValue]訪問void*代表結構的地址,你放入NSValue

+0

抱歉,無法理解如何獲得/改變某些結構元素... :( – maaboo 2012-01-31 12:59:44

+0

值@maaboo轉換'無效*'來的一個指針結構,並通過改變結構的字段' - > 'operator:'((SomeStruct *)[someObj pointerValue]) - > value2 = 5' – dasblinkenlight 2012-01-31 13:53:15