1

我正在为 iPhone开发一个益智游戏应用程序 -在 youtube 上观看,而实际的“游戏内”部分几乎完成了。它是一个单独的类(UIView 的子类),它使用拼图线索、拼图块进行初始化,并且如果拼图已解决(每次 touchesEnded 都会调用“完整性”检查),则准备好向某人发送消息。

现在我很困扰如何以编程方式设计整个应用程序模式。

游戏需要一个主菜单视图,一个拼图选择器视图,我可以从中“创建” puzzleLevel 实例,我必须将实际的拼图数据存储在一个单独的类中(我想),也许在存档文件中,并且需要一个偏好视图,我可以在其中更改每个puzzleLevel 实例应使用的“全局”变量(角度捕捉值、皮肤等)。

我能感觉到我必须用主viewController 来控制我上面提到的所有视图,但我不知道该怎么做。我应该在哪里存储全局变量?我应该在哪里存储拼图数据?我应该如何报告“拼图完整性”,我应该为谁报告?我应该如何设计视图层次结构?

我想知道是否有人可以向我展示一些概念,或者只是一个我可以相处的链接。我主要对概念感兴趣,实际的编码部分可以在之后“搜索”。

4

2 回答 2

2

通常,我的游戏顶部有一个 App 对象,它拥有多个 AppState(菜单、选择器、首选项等)之一,并根据需要在它们之间切换,这是状态模式的典型用法。这些状态处理它们自己的渲染和输入,并存储它们需要的任何资源。App 对象还拥有跨状态共享的任何全局应用程序范围的设置和对象(例如渲染、声音)。这些可以单独传递给状态,或者状态可以在某些时候从应用程序请求相关接口。

AppStates 之一将是游戏的运行状态,它将包含当前谜题的定义,以及此游戏会话的当前状态(例如,它的完成程度)。我倾向于仍然有一个由相关 GamePlayingState 拥有的单独的 Game 类,因为前者只包含游戏逻辑信息,而后者处理输入/输出。

于 2009-11-20T10:15:09.800 回答
0

我想我应该使用NSNotification类。它只是在包含子视图的对象(viewController)中设置一个“监听器”,然后子视图可以向控制器发送通知。然后通知处理程序可以调用任何方法。

视图控制器部分:

-(void) viewDidLoad
{   
//Set up a listener.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationHandler:) name:@"finishedCurrentLevel" object:nil];   
...
}

-(void) notificationHandler: (NSNotification*) notification
{
//Notification handling.
if ([notification name] == @"finishedCurrentLevel") [self finishedCurrentLevel];
}

-(void) finishedCurrentLevel
{
//View managing code here...
}

设置的通知的通知、侦听和“响应”是。实际的通知是这样的(可以从任何子视图执行):

[[NSNotificationCenter defaultCenter] postNotificationName:@"finishedCurrentLevel" object:nil];

我认为它解决了我的“沟通”问题。

关于全局变量,我只是用对应的 globals.h 创建了一个单独的 globals.m 文件,而没有定义任何类。他们只是“附加”了一些外部变量,所以我可以从任何导入了 globals.h 的文件中访问它们。

于 2009-11-24T19:24:04.943 回答