CCNode的userdata

时间:2011-03-22 13:44:10

标签: iphone objective-c cocos2d-iphone user-data

我有一个实例调用函数的CCMenuItemSprite:

`

menuControl = [CCMenu menuWithItems: nil];

//Create the buttons
for(int i=1;i<17;i++)
{
  Button *B_image = [Button buttonWithTexture:Sheet.texture type:i];

  CCMenuItemSprite *menuButton = [CCMenuItemSprite itemFromNormalSprite:B_image  selectedSprite:B_image target:self selector:@selector(generateEnemy:)];

NSNumber *Btype = [NSNumber numberWithInt:i];
menuButton.userData = Btype;

[menuControl addChild:menuButton];

}

[self addChild:menuControl];`

正如您在上面所看到的,我正在使用menuButton.userData传入NSNumber。 这是“将参数传递给generateEnemy函数。”

`-(void) generateEnemy:(CCMenuItemSprite*)sender
{
    NSNumber *Btype = (NSNumber*)sender.userData;

        int Etype = [Btype intValue];

        enemy = [[Enemy alloc]init:ccp(300,0) Type:Etype];
}

它崩溃了:NSNumber *Btype = (NSNumber*)sender.userData; 适用于1-12号。但是13岁以上,它崩溃了。

1 个答案:

答案 0 :(得分:1)

我很久以前就解决了这个问题。 由于这个概念here,它崩溃了。

我如何传递数据:

for(int i=1;i<17;i++)
{
   Button *B_image = [Button buttonWithTexture:Sheet.texture type:i];

   CCMenuItemSprite *menuButton = [CCMenuItemSprite itemFromNormalSprite:B_image  selectedSprite:B_image target:self selector:@selector(generateEnemy:)];

   menuButton.tag = i;

   [menuControl addChild:menuButton];

}

在generateEnemy函数中:

-(void) generateEnemy:(id) sender
{
      enemy = [[Enemy alloc]init:ccp(300,0) Type:[sender tag]];
}