iPhone游戏设计中的单身人士/全球变量

时间:2011-12-19 23:25:33

标签: ios iphone variables global

我正在创建一个iPhone游戏,角色在不同视图之间移动,因此每个视图本身就是一个新游戏。但是现在我想创造健康,所以如果健康状况在一个视图中下降到5马力,那么当他们改变到不同的视野时,健康状况仍然是5.我做了一些研究,这听起来像我need是单例或全局变量。但是我所看到的一切对我来说毫无意义。我的任何一个app代表都没有任何内容,而且我没有使用任何框架,如cocos2d或OpenGLES。发布代码现在似乎没有用,所以如果你能告诉我你需要看哪些代码来帮助你回答我的问题。

2 个答案:

答案 0 :(得分:1)

  

我做了一些研究,听起来我需要的是单身或全局变量。

您需要的是在视图控制器之间共享您的角色数据。单例是共享数据的一种方式;它在概念上非常简单,但往往带来不幸的后果。有关其中一些后果的讨论,请参见What is so bad about singletons?。有关其他方法,请参阅Alternatives to Singletons

如果决定使用单例(不推荐),则应该注意为该对象选择角色。例如,您的第一个想法可能是创建一个代表玩家或角色的单身人士。但是,这意味着你的游戏中只能拥有一个玩家或角色。更好的选择是创建一个玩家管理器,您可以使用它来访问当前玩家。

更好的选择是放弃单例并给每个视图控制器playergameController属性(假设你有一些对象负责整个游戏。游戏控制器会启动每个新的“board”通过实例化相应的视图控制器,将gameController属性设置为自身,并将player属性设置为当前播放器对象。这样,视图控制器不必看在游戏的一部分完成之后,它可以使用其gameController属性向游戏控制器发送一条消息:“我已经完成了,你可以继续下一个董事会“或任何适当的。

答案 1 :(得分:-2)

从技术上讲,任何东西都可以从应用中的任何地方进行访问,因为我们可以像这样访问应用代理:

#import "AppDelegate.h"
#define kAppDelegate (AppDelegate*)[[UIApplication sharedApplication] delegate]

所以如果你在app delegate中定义一个属性,如下所示:

@property (assign) CGFloat health;

你可以像这样访问它......

CGFloat health = [kAppDelegate health];