Cocos2D iPhone - запуск метода на главной сцене из CCLayer - PullRequest
0 голосов
/ 03 марта 2012

У меня есть эта основная сцена в игре, и я вызвал меню, где пользователь может выбрать параметры для нового матча (количество игроков, уровень сложности и т. Д.).

Это меню было создано на CClayer и представлено поверх главной сцены, используя это:

CCLayer *menu = [Menu node];

id actionFadeIn = [CCFadeIn actionWithDuration:0.3];
[menu runAction:[CCSequence actions:actionFadeIn, nil]];

[self addChild:menu z:1 tag:theMenu];

Класс этого меню имеет базовую логику. Для каждого параметра, выбранного в этом меню, надлежащий параметр устанавливается для одного элемента. Теперь, когда пользователь выбрал все параметры, он будет нажимать кнопку START GAME.

Когда это происходит, меню должно исчезать, и метод с именем startGame должен запускаться на главной сцене, но это моя проблема: как запустить метод из класса меню? Я думал, что смогу сделать

CCScene *currentScene = [[CCDirector sharedDirector] runningScene];
[currentScene startGame];

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

Я думал об использовании уведомлений, чтобы опубликовать приказ о запуске метода в классе, но это звучало неубедительно и напоминало использование пушки для уничтожения мухи. Как лучший способ сделать это в Cocos?

спасибо.

Ответы [ 2 ]

1 голос
/ 03 марта 2012

У меня есть очень подробный ответ на ваш вопрос в следующем посте:

Доступ к объектам в других слоях (cocos2d)

Вы в основном делаете свою сцену "пол-синглтон».Другие способы также объясняются, если вы предпочитаете другой подход.

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

Я думаю, что исчезающее меню легко, вам просто нужно вызвать метод исчезновения на том же слое, т.е. Menu.Теперь, когда вы нажимаете кнопку запуска, вы можете вызвать метод в классе Menu, скажем startPressed

- (void)startPressed{
   [[self parent] start];
}

Родителем слоя меню является ваш игровой слой.

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