Как мне вызвать метод updateString из моего HUDLayer в моем PlayLayer? - PullRequest
0 голосов
/ 01 марта 2012

Я делаю игру для iPhone.Я пытался реализовать хорошую архитектуру, но я думаю, что это пошло против меня.У меня есть 2 слоя для моей PlayScene;HUDLayer и PlayLayer.Это два класса, которые создаются как слои в классе SceneManager и оба добавляются в PlayScene.

Вопрос в том, как получить доступ к своему классу HUD из моего класса PlayLayer?Мне нужно получить к нему доступ из PlayLayer, поскольку там находится весь код движения / события.

Это методы в классе SceneManager, которые создают сцену.

+(void) goPlay
{
    CCLayer *hudLayer = [HUD node];
    CCLayer *playLayer = [PlayLayer node];
    hudTag = playLayer.tag;

    [SceneManager goWithHud: playLayer: hudLayer: hudTag];
} 


+ (CCScene *) goWithHud:(CCLayer *) playLayer:(CCLayer *) hudLayer:(int)hudTag {
    CCDirector *director = [CCDirector sharedDirector];
    CCScene *newScene = [CCScene node];
    [newScene addChild: playLayer];
    [newScene addChild: hudLayer z:0 tag:hudTag];

    if([director runningScene])
           [director replaceScene:newScene];
    else 
       [director runWithScene:newScene];
    return newScene;
}

Итак, у меня есть класс HUD, который действует как HUDLayer, и класс PlayLayer, который как все движение/ код события в.

Как установить строку на одной из меток в HUD и откуда мне это сделать?Я перепробовал много подходов, но мне кажется, что я больше не понимаю Obj-C.

Если вам нужно больше кода, скажите мне;Я просто не хочу спамить его там, если это не нужно.

Заранее спасибо, ребята:).

1 Ответ

0 голосов
/ 01 марта 2012

Один из подходов может быть таким (Это обеспечит потерю связи и правильное разделение ответственности.)

Как у вас есть SceneManager, который имеет оба слоя. Вы можете использовать шаблон delegation или notification, чтобы сообщить SceneManager, что это какое-то движение или событие в PlayLayer (методы делегата (или userInfo в случае уведомления) предоставят необходимую информацию, которую SceneManager будет использовать для настройки HUDLayer).

Обновление:

В этом случае вместо использования SceneManager класса для обработки методов делегата (так как все методы static) вам нужно будет использовать класс, из которого вы работаете SceneManager. (I назову это 'X'). Так что X будет обрабатывать делегирование или уведомление. Также для предоставления наблюдателя вам нужно будет передать X в метод goPlay.

Итак, ваше goPlay объявление метода станет:

+(CCScene *) goPlayWithEventObserver:(id)observer;

Кроме того, из метода goPlay вам потребуется вернуть объект сцены в X, что поможет X получить доступ к его дочернему элементу (HUDLayer), вызвав метод getChildByTag. Вы можете получить экземпляр PlayLayer от его представителя или предоставить его в userInfo.

Спасибо

...