Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 寻找管理游戏级别视图、级别选择视图、首选项视图、存储级别、环境变量的概念_Iphone_Objective C_Design Patterns_Viewcontroller - Fatal编程技术网

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

Iphone 寻找管理游戏级别视图、级别选择视图、首选项视图、存储级别、环境变量的概念,iphone,objective-c,design-patterns,viewcontroller,Iphone,Objective C,Design Patterns,Viewcontroller,我正在为iPhone开发一款益智游戏应用程序,实际的“游戏中”部分几乎完成了。它是一个单独的类(UIView的子类),用一个拼图线索、拼图块进行初始化,如果拼图已经解决,它就可以向某人发送消息(“完整性”检查在每次触摸时调用) 现在,我很困惑如何以编程方式设计整个应用程序模式。 游戏需要一个主菜单视图,一个拼图选择器视图,我可以从中“创建”拼图级实例,我必须将实际的拼图数据存储在一个单独的类中(我想),可能在存档文件中,并且需要一个首选项视图,在其中,我可以更改每个Puzzlevel实例应该使用

我正在为iPhone开发一款益智游戏应用程序,实际的“游戏中”部分几乎完成了。它是一个单独的类(UIView的子类),用一个拼图线索、拼图块进行初始化,如果拼图已经解决,它就可以向某人发送消息(“完整性”检查在每次触摸时调用)

现在,我很困惑如何以编程方式设计整个应用程序模式。 游戏需要一个主菜单视图,一个拼图选择器视图,我可以从中“创建”拼图级实例,我必须将实际的拼图数据存储在一个单独的类中(我想),可能在存档文件中,并且需要一个首选项视图,在其中,我可以更改每个Puzzlevel实例应该使用的“全局”变量(角度捕捉值、蒙皮等)

我可以感觉到我必须使用主viewController来控制我上面提到的所有视图,但我不知道如何确切地做到这一点我应该在哪里存储全局变量?我应该在哪里存储拼图数据?我应该如何报告“谜题完整性”,我应该向谁报告?如何设计视图层次结构?


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

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


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

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

viewController部件:

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

我想它解决了我的“沟通”问题


关于globals,我只是创建了一个单独的globals.m文件,其中coresponding globals.h并没有定义任何类。他们只是“附加”了一些外部变量,这样我就可以从任何导入了globals.h的文件中找到它们。

哇,到处强调的是什么?我想目的是让长问题更容易浏览。我也这么做了,直到我意识到这会分散读者的注意力。谢谢你的回答。这是否有点像我使用自定义compactTangramViewController的实例:UIViewController类(作为应用程序对象),以及所有视图的实例变量(@property-s)和pref变量?目前尚不清楚如何将所有这些“连接起来”。状态如何请求输入拼图选择器视图(它如何告诉控制器输入选择器视图)?拼图选择器如何告诉控制器初始化新的拼图?谜题如何从控制器获得实际角度(例如角度)。。。。。。我应该从AppController:NSObject子类化所有内容吗?拼图选择器应该是拼图选择器:AppController?还是AppController的实例变量?我可以在课堂上解决问题,但组织起来对我来说似乎有点困难。总而言之:你能给我发一份这个想法的阶级结构/继承的草图吗?而且,像这样?看起来很有希望,即使我不知道如何实现所有这些。。。现在是读取部分…如果viewController运行NSTimer,它可以从其子视图中收集/读取任何数据,并根据需要重定向/更新/等等。也许这是一个解决方案,但我希望有更聪明的方法来做到这一点(一种“仅对用户交互进行调用”的方法)。我仍然不知道全局变量。我不能给你Objective-C的建议,只是对结构的概述。您要求提供设计模式,因此请确保您熟悉这些模式——状态模式是一种常用模式,您可以在多个地方了解到它。
-(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];