Способ узнать, кто называется синглтон - цель C - PullRequest
0 голосов
/ 05 января 2011

Я разрабатываю игру с несколькими уровнями.У меня есть CCLayer, определенный как одноэлементный (называемый MasterScene), где я обрабатываю страницу паузы, страницу перехода, баннер счета игрока, ... все вещи, общие для всех уровней.Таким образом, на каждом уровне, когда пользователь нажимает кнопку паузы, вызывается вызов синглтона для отображения CClayer, соответствующего странице паузы.Моя проблема в том, что я хочу знать, кто называется синглтон (какой уровень) т.Есть ли способ сделать это?Спасибо

Ответы [ 3 ]

3 голосов
/ 05 января 2011

Не зная больше об архитектуре вашего приложения, я бы предложил три возможных подхода:

  1. Передать номер уровня (или указатель на объект уровня, или что-то еще) в качестве параметра для методов синглтона.
  2. Пусть объект отслеживает, какой уровень является текущим, чтобы он уже знал. (Очевидно, это предполагает, что эти методы могут вызывать только текущий уровень. Но я не уверен, почему несколько уровней имеют доступные кнопки паузы.)
  3. Не делайте этот объект синглтоном вообще. Создайте экземпляр для каждого уровня. Есть ли действительно глобальное состояние приложения, которое этот объект должен отслеживать? Если вы используете MasterScene для инкапсуляции поведения, но не глобального состояния, то наличие нескольких экземпляров этого класса не повредит (или потребит много ресурсов устройств)
1 голос
/ 05 января 2011

Нет общего способа найти источник сообщения так, как вы просите.

Однако существуют альтернативные архитектуры для вашего приложения, которые могут решить эту проблему, и я призываю вас рассмотреть их.То, что вы описываете, звучит как беспорядок взаимозависимых классов.Все ваши уровни знают и используют этот синглтон MasterScene, и теперь вы пытаетесь сделать так, чтобы синглтон также знал о каждом уровне?Каждой части ваших приложений не нужно знать о других.

0 голосов
/ 05 января 2011

Вы можете передать его в качестве аргумента, например,

@implementation Level30
-(void) pause;
{
    [[MasterScene getSingleton] pauseWithLevel:self];
}
@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...