Singletons / Глобальные переменные в игровом дизайне iPhone - PullRequest
1 голос
/ 20 декабря 2011

Я создаю игру для iPhone, в которой персонаж перемещается между различными видами, поэтому каждый вид по сути является новой игрой сам по себе.Но теперь я хочу создать здоровье, поэтому, если здоровье ухудшается с одной точки зрения, скажем, 5 л.синглтон или глобальная переменная.Но все, что я видел, не имеет смысла для меня.У меня ничего нет ни в одном из моих делегатов приложения, и я не использую никаких фреймворков, таких как cocos2d или OpenGLES.Публикация кода, похоже, сейчас не работает, поэтому, если бы вы могли сказать мне, какой код вам нужно увидеть, чтобы помочь вам ответить на мой вопрос.

Ответы [ 2 ]

1 голос
/ 20 декабря 2011

Я провел некоторые исследования, и мне кажется, что мне нужна единичная или глобальная переменная.

Вам нужно поделиться своими символьными данными между контроллерами представления.Singleton - это один из способов обмена данными;это концептуально довольно просто, но часто приводит к печальным последствиям.См. Что плохого в синглетах? для обсуждения некоторых из этих последствий.См. Альтернативы синглетам для некоторых других подходов.

Если вы делаете решаете использовать синглтон (не рекомендуется), вы должны быть осторожны при выборе роли для этогообъект.Например, вашей первой мыслью может быть создание синглтона, представляющего игрока или персонажа.Однако это будет означать, что в вашей игре может быть только один игрок или персонаж.Лучше было бы создать менеджера игроков, который вы могли бы использовать для доступа к текущему игроку.

Еще лучшим вариантом было бы отказаться от синглтона и присвоить каждому контроллеру свойств player и gameController свойства.(Предполагая, что у вас есть какой-то объект, отвечающий за всю игру. Игровой контроллер запускает каждую новую «доску», создавая соответствующий контроллер вида, устанавливая для себя свойство gameController и устанавливая свойство player длятекущий объект игрока. Таким образом, контроллеру представления не нужно смотреть вне себя, чтобы узнать об игроке. Когда его часть игры закончена, он может использовать свое свойство gameController, чтобы отправить сообщение игровому контроллеру.что говорит: «Я закончил, вы можете перейти к следующей доске» или что угодно.

0 голосов
/ 20 декабря 2011

Технически, любой доступ может быть доступен из любого места в приложении, потому что мы можем получить доступ к делегату приложения следующим образом:

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

, поэтому, если вы определяете свойство в делегате приложения следующим образом:

@property (assign) CGFloat health;

вы можете получить к нему доступ, так что ...

CGFloat health = [kAppDelegate health];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...