使用协议和基类的游戏状态实现

时间:2015-06-14 02:34:53

标签: objective-c macos state-machine

从我到目前为止所读到的内容来看,Objective C似乎没有抽象类。我试图实现一个类似于Apple在GameKit(GKState和GKStateMachine)中宣布的游戏状态管理器。

到目前为止,我的解决方案涉及创建一个名为 BaseGameState 的基本状态类,它遵循我创建的名为 GameState 的协议。对于我需要进行游戏玩法的每个州,我将继承BaseGameState类的子类。我的BaseGameState类就在那里,所以我可以将它子类化,并且不会真正做任何事情,但我希望我的状态机可以使用一种类型。控制我所处的状态的类叫做 GameStateMachine ,它将包含一个从BaseGameState子类化的对象数组。

对我而言,这似乎是一个可怕的解决方案,我想知道是否有一种标准方法可以在使用GameKit类之外进行此操作(我目前无法使用它,因为我需要此应用程序来定位Yosemite)

1 个答案:

答案 0 :(得分:1)

您不需要基类,特别是如果它没有提供任何实现。这也更灵活,因为它使用户可以自由地使用不同的基类或使用协议的实现扩展现有类。

让GameStateMachine存储一个符合GameState协议的任何对象的数组 - 即id <GameState>