将实例变量传递给在CCMenuItemImage中配置的选择器

Tim*_*mbo 2 objective-c cocos2d-iphone

我需要一只手将变量传递给CCMenuItemImage中配置的选择器,如果可能的话.好像它应该是,我只是无法解决它!

这是我想要实现的目标:

  1. 使用for/loop创建说20个游戏关卡项目的菜单.没问题.
  2. 在for/loop中,指定递增变量.没问题.
  3. 将递增变量传递给CCMenuItemImage中指定的选择器.问题!
  4. 使用递增变量来确定在点击特定菜单项时要加载的游戏级别.没有#3的问题解决了!

无论如何,使用(为清晰起见)代码:

这是for/loop中用于创建菜单项的命令

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

现在正如您在上面的代码片段中看到的那样,没有空间可以说'userinfo',就像NSTimer类为此目的提供的那样.

理想情况下,我不是将每个CCMenuItemImage指向我无法传递变量的同一个选择器,而是实际上更愿意调用下面这样的方法.int表示在点击CCMenuItemImage时应加载的游戏关卡:

- (void)onSelectWithStage:(int)selectedStage {

// write the selected stage to the GameData.xml

    [SceneManager goLevelSelect];
}
Run Code Online (Sandbox Code Playgroud)

无论如何,我认为这几乎总结了这个问题.希望我错过了一些明显的东西:)

在此先感谢您的时间

eri*_*rik 5

使用标签!

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;
}
Run Code Online (Sandbox Code Playgroud)

并相应地调整onSelect方法.

-(void)onSelect:(CCMenuItemImage*)item{
    int lvl = item.tag;
    [self onSelectWithStage:lvl]; 
}
Run Code Online (Sandbox Code Playgroud)