Cocos2D:从CCMenuItemFont获取文本

时间:2013-10-16 21:21:21

标签: ios objective-c cocos2d-iphone

我想我错过了一些明显的东西,但我根本无法弄清楚如何获得CCMenuItemFont的标签。

背景 我正在为iPad构建一个简单的刽子手游戏。为了进入下一个猜测,我在UI中添加了26个按钮(每个字母对应一个字母),并将它们全部连接到同一个事件处理程序。

现在,在事件处理程序中,我想获取按钮的标签来更新当前猜测,但CCMenuItemFont显然不响应textlabel

问题 那么 - 我可以用什么方法来获取CCMenuItem的标签?

代码 创建按钮的代码:

-(void)addButtons {
    NSArray* charArray = [NSArray arrayWithObjects:
      @"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",
      @"L",@"M",@"N",@"O",@"P",@"Q",@"R",
      @"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z", nil];
    [CCMenuItemFont setFontName:@"Marker Felt"];
    [CCMenuItemFont setFontSize:45];

    NSMutableArray* buttonArray = [NSMutableArray array];
    for (unsigned int i=0; i < [charArray count]; ++i) {
      CCMenuItemLabel* buttonMenuItem = [CCMenuItemFont 
        itemWithString:(NSString*)[charArray objectAtIndex:i] 
        target:self selector:@selector(buttonTapped:)];
      buttonMenuItem.color = ccBLACK;      
      buttonMenuItem.position = ccp(60 + (i/13)*40, 600 - (i%13)*40);
      [buttonArray addObject:buttonMenuItem];       
    }
    CCMenu *buttonMenu = [CCMenu menuWithArray:buttonArray];
    buttonMenu.position = CGPointZero;
    [self addChild:buttonMenu];
}

事件处理程序:

- (void)buttonTapped:(id)sender {
    // Get a reference to the button that was tapped
    CCMenuItemFont *button = (CCMenuItemFont *)sender;
    [_guess addObject:[button text]]; // this throws an exception because text is the wrong method
    [self paintCurrentGuess];
}

1 个答案:

答案 0 :(得分:2)

您要在菜单中添加CCMenuItemLabel,而不是CCMenuItemFont(实际上扩展了第一个)。在这两种情况下,您都需要访问包含文本的内部label .-

CCMenuItemLabel *button = (CCMenuItemLabel *)sender;
NSString *label = button.label.string;