2011-10-24 43 views
1

我很難實現一種遊戲狀態技術,它允許我通過將當前狀態存儲在合適的變量中來切換不同的遊戲狀態。虛擬無效的目標C等效 - 在遊戲狀態技術中使用

我創建了NSObject * currentState,它被設置爲當前狀態,但是當試圖向[currentState方法]發送消息時,我得到'may not respond'錯誤消息。 (由於NSObject類型)。

我也嘗試創建一個名爲Gamestate的超類模板,並在從gamestate繼承的同時創建了單個gamestates。然而,還有另外一個錯誤消息,表明遊戲狀態對象中沒有實現任何方法(這是正確的,因爲我只想在子對象中實現方法)。

不知道協議是否會幫助我。有關如何實現沒有錯誤信息的gamestate的任何建議?

在此先感謝;)

回答

0

看一看Creating an abstract class in Objective C

如果您聲明id currentState而不是NSObject *currentState,則不會收到[currentState method]的「可能無法響應」警告。

+0

感謝rob,添加id已經刪除了錯誤信息。首先忘記從* currentState中刪除'*',我將不得不找出Id爲什麼不接受指針類型。再次感謝;) – eJm

+0

'id'是一個指針,所以你不需要'*'。只要將'id'想象成像'NSObject *'一樣,但檢查錯誤較少。 –

0

如果GameStates不會共享太多共同的代碼(或者如果您可以以不同的方式共享),抽象類是一個好主意,或者使用協議。也就是說,如果你要編寫一個抽象類,但所有的方法都是抽象的,並且類中沒有代碼,只有聲明,那麼協議可能會更好地匹配你正在做的事情。

+0

謝謝morningstar,我想過使用協議,儘管我努力確保在課堂上實施必要的方法。協議主要是爲了確保我不會忘記實現特定的方法?乾杯:) – eJm

+0

你總是可以使用一個裸ID變量,而不是一個協議。協議幾乎和你說的一樣。它使變量具有強類型,因此您必須在其中放入適當的對象。它允許你在編譯時檢查你在運行時不會得到「無法識別的選擇器」。 – morningstar