CCMenuItems松散标签

时间:2012-07-25 07:21:15

标签: objective-c cocos2d-iphone kobold2d

我正在向CCMenuItemToggle添加两个CCMenuItemImage对象,如下所示:

CCMenuItemImage *soundEnabled = [CCMenuItemImage itemWithNormalImage:@"button_sound_enabled.png"
                                                       selectedImage:@"button_sound_enabled.png"];
soundEnabled.tag = kSoundEnabled;

CCMenuItemImage *soundDisabled = [CCMenuItemImage itemWithNormalImage:@"button_sound_disabled.png"
                                                        selectedImage:@"button_sound_disabled.png"];
soundDisabled .tag = kSoundDisabled;

CCMenuItemToggle *sound = [CCMenuItemToggle itemWithItems:[NSArray arrayWithObjects:soundEnabled,soundDisabled,nil] block:^(id sender) {
  CCMenuItem *item= ((CCMenuItemToggle*).sender).selectedItem;
  CCLog(@"item tag: %d",item.tag);
}];

kSoundEnabledkSoundDisabled是值为2和3的枚举项。当我在创建它们之后记录每个CCMenuItemImage的标记时,一切都很好。但是当我在块中记录它们时,标签显示为-1061138431。

此外,当我尝试将它们记录在块之外时,只是在我的图层的初始化代码中进一步向下,它们开始出现错误。

有人知道这里的问题是什么吗?这是一个支持Kobold2d ARC的项目,ARC可能成为问题吗?我认为这不会解释像NSInteger这样的简单数据类型?

我知道我可以查看sender.selectedIndex = 0sender.selectedIndex = 1,但我仍然想了解这里的问题。

1 个答案:

答案 0 :(得分:3)

问题不是来自ARC配置或其他。我用Cocos2D 2.0测试了它,我有同样的问题。我查看了源代码,问题来自CCMenuItemToggle,它改变了子代的标签以保持当前显示项的轨迹。

我应该像你那样使用你的变量的引用:

CCMenuItemToggle *sound = [CCMenuItemToggle itemWithItems:[NSArray arrayWithObjects:soundEnabled,soundDisabled,nil] block:^(id sender)
{
  CCMenuItem *item= ((CCMenuItemToggle*).sender).selectedItem;
  if (item == soundEnabled)
  {
     //...
  } else
  {
     //...
  }
}];