2

関数を呼び出すためにインスタンス化する 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以降ではクラッシュします。

4

1 に答える 1

1

私はかなり前にこの問題を解決しました。ここでこの概念が原因でクラッシュします。

データを渡す方法は次のとおりです。

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]];
}
于 2011-08-05T01:36:22.910 に答える