以下代码对我有用:
在菜单层的init方法中:
CCMenuItemFont *item1 = [CCMenuItemFont itemWithString:@"Level 1" target: self selector: @selector(startLevel:)];
item1.userData = (__bridge void*) ([NSNumber numberWithInt:1]);
...//create menu and add in the item1
-(void)startLevel: (CCMenuItem *)sender
{
NSNumber *number = sender.userData;
...
}
我的问题是:
答案 0 :(得分:2)
CCMenuItem将自身作为参数传递给此选择器。详细信息在CCMenuItem源代码中。
答案 1 :(得分:0)
关于省略将自身作为参数传递,你的意思是......
- (void) pushedStart : (id) sender
{
//start game
}
但你做不到
[self pushedStart];
因为它需要一个参数?如果是这样,你可以做到这一点:
id junkID;
[self pushedStart: junkID];
JunkID将初始化为未分配的ID分配到的任何内容,因此您将其作为参考传递,并且不要将其用于任何内容,如果您想要“开始游戏”按钮但这很好让游戏自动启动计时器或你用按钮做的其他事情
作为旁注,并且越来越多地了解可可,它知道的方式(以及你不能忘记的)是结肠。当你调用一个函数时,你把变量放在冒号之后[self eat:food];
当您将菜单项放在一起时,使用target:self设置它,这使得按钮使用自身(而不是您在调用[self eatABanana]时使用的“self”图层)作为目标。按下按钮
menuButton = target:self selector:@selector(pushButton:)
表示为
[self pushButton:menuButton]
如果您忘记了冒号,它与调用函数并且不传递变量相同,这不会给出非常有用的错误消息,因为它无法帮助您找到问题发生的位置。我花了几个小时追逐因为在那些该死的菜单按钮中编写@selector(startGame)而不是@selector(startGame :)而造成的内存崩溃。当我终于明白时,我总觉得很蠢。