寻找管理游戏级别视图,级别选择视图,首选项视图,存储级别,环境变量的概念

时间:2009-11-20 09:46:18

标签: iphone objective-c design-patterns viewcontroller

我正在开发一款益智游戏应用程序 - watch on youtube - 适用于iPhone,实际的“游戏内”部分几乎已完成。它是一个单独的类(UIView的子类),用拼图线索,拼图块进行初始化,并且如果拼图解决了(在每个touchesEnded上调用“完整性”检查),就可以为某人发送消息。

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

游戏需要主菜单视图拼图选择器视图,从中我可以“创建” puzzleLevel实例,我必须存储实际的谜题数据在一个单独的类中(我猜),可能在存档文件中,需要首选项视图,我可以更改“全局”变量每个puzzleLevel实例都应该使用(角度捕捉值,皮肤等)。

我可以感觉到我必须对主视图控制器执行某些操作,控制我上面提到的所有视图,但我不知道如何完成它。 我应该在哪里存储全局变量?我应该在哪里存储拼图数据?我应该如何报告“拼图完整性”,以及我应该报告谁?我该如何设计视图层次结构?

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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];

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

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