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

时间:2011-06-20 12:20:28

标签: objective-c cocos2d-iphone

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

这就是我想要实现的目标:

  1. 创建20个游戏关卡项目的菜单 为/循环。没问题。
  2. 在for / loop中,指定 递增变量。没问题。
  3. 将递增变量传递给指定的选择器 CCMenuItemImage。问题!
  4. 使用递增变量 确定点击特定菜单项时要加载的游戏级别。没有#3的问题解决了!
  5. 无论如何,使用(为清晰起见)代码:

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

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

    现在你可以在上面的代码片段中看到,就像NSTimer类为此目的提供的'userinfo'没有空间。

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

    - (void)onSelectWithStage:(int)selectedStage {
    
    // write the selected stage to the GameData.xml
    
        [SceneManager goLevelSelect];
    }
    

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

    提前感谢您的时间

2 个答案:

答案 0 :(得分: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;
}

并相应地调整onSelect方法。

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

答案 1 :(得分:1)

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

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

Simples。