Передача переменной экземпляра в селектор, настроенный в CCMenuItemImage - PullRequest
2 голосов
/ 20 июня 2011

Мне нужна рука, передающая переменную селектору, настроенному в CCMenuItemImage, если это вообще возможно. Похоже, так и должно быть, я просто не могу разобраться!

Вот что я пытаюсь достичь:

  1. Создайте меню, скажем, из 20 игровых уровней с для / петли. Нет проблем.
  2. В цикле for / укажите инкрементная переменная. Нет проблем.
  3. Передача инкрементной переменной селектору, указанному в CCMenuItemImage. Проблема!
  4. Использовать инкрементную переменную для определить, какой уровень игры загружать при нажатии на конкретный пункт меню. Проблема без # 3 решена!

Во всяком случае, с (сокращен для ясности) код:

Вот команда, используемая в цикле for / для создания пункта меню

CCMenuItemImage *image = [CCMenuItemImage itemFromNormalImage:@"Normal.png" selectedImage:@"Selected.png" target:self selector:@selector(onSelect:)];

Теперь, как вы можете видеть в приведенном выше фрагменте, нет места для «userinfo», как это предусмотрено в классе NSTimer.

В идеале, вместо того, чтобы указывать каждый CCMenuItemImage на один и тот же селектор, которому я не могу передать переменную, я бы фактически предпочел вызвать метод, подобный этому ниже. Int будет представлять игровой уровень, который должен быть загружен при нажатии CCMenuItemImage:

- (void)onSelectWithStage:(int)selectedStage {

// write the selected stage to the GameData.xml

    [SceneManager goLevelSelect];
}

В любом случае, я думаю, что это в значительной степени подводит итог. Надеюсь, мне не хватает чего-то явно очевидного:)

Заранее спасибо за ваше время

Ответы [ 2 ]

5 голосов
/ 20 июня 2011

Используйте теги!

for(int i = 0;i<MAX_LEVELS;i++)
{
    CCMenuItemImage *image = [CCMenuItemImage 
                                       itemFromNormalImage:@"Normal.png"
                                             selectedImage:@"Selected.png" 
                                                    target:self   
                                                  selector:@selector(onSelect:)];
    image.tag = i;
}

И соответственно измените метод onSelect.

-(void)onSelect:(CCMenuItemImage*)item{
    int lvl = item.tag;
    [self onSelectWithStage:lvl]; 
}
1 голос
/ 20 июня 2011

Подход, который я выбрал бы, состоит в том, чтобы добавить уровни к NSDictionary с ключом в экземпляре CCMenuItemImage, поэтому создайте уровень, создайте элемент меню и добавьте уровень в словарь, связанный с помощью этого пункта меню.

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

Simples.

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