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

Objective c 将实例变量传递给CCMenuItemImage中配置的选择器,objective-c,cocos2d-iphone,Objective C,Cocos2d Iphone,如果可能的话,我需要一只手将一个变量传递给CCMenuItemImage中配置的选择器。看起来应该是这样,我就是想不出来 以下是我努力实现的目标: 创建包含20个游戏级别项目的菜单 for/loop。没问题 在for/loop中,指定 递增变量。没问题 将递增变量传递给中指定的选择器 CCMenuItemImage。问题 使用递增变量 确定点击特定菜单项时要加载的游戏级别。问题没有解决 无论如何,请使用(为清晰起见,请删节)代码: 下面是for/loop中用于创建菜单项的命令 CCMenuIte

如果可能的话,我需要一只手将一个变量传递给CCMenuItemImage中配置的选择器。看起来应该是这样,我就是想不出来

以下是我努力实现的目标:

  • 创建包含20个游戏级别项目的菜单 for/loop。没问题
  • 在for/loop中,指定 递增变量。没问题
  • 将递增变量传递给中指定的选择器 CCMenuItemImage。问题
  • 使用递增变量 确定点击特定菜单项时要加载的游戏级别。问题没有解决 无论如何,请使用(为清晰起见,请删节)代码:

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

    CCMenuItemImage *image = [CCMenuItemImage itemFromNormalImage:@"Normal.png" selectedImage:@"Selected.png" target:self selector:@selector(onSelect:)];
    
    现在,正如您在上面的代码片段中所看到的,没有空间可以像NSTimer类那样用于此目的

    理想情况下,与其将每个CCMenuItemImage指向我无法传递变量的同一个选择器,我实际上更喜欢调用下面这样的方法。int表示点击CCMenuItemImage时应加载的游戏级别:

    - (void)onSelectWithStage:(int)selectedStage {
    
    // write the selected stage to the GameData.xml
    
        [SceneManager goLevelSelect];
    }
    
    不管怎么说,我认为这基本上概括了这个问题。希望我错过了一些显而易见的东西:)


    提前感谢您的时间

    我将采取的方法是将级别添加到在CCMenuItemImage实例上键入的NSDictionary中,因此创建级别,创建菜单项,并将级别添加到在其菜单项上键入的dictionary中

    当选择器触发时,您将获得发送它的CCMenuItemImage的引用,只需使用与菜单项匹配的键从字典中获取级别

    简单。

    使用标签

    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;
    }
    

    +1使用标签是最简单且推荐的方法:
    -(void)onSelect:(CCMenuItemImage*)item{
        int lvl = item.tag;
        [self onSelectWithStage:lvl]; 
    }