我正在cocos2d中实现一个按钮类,我希望能够在创建按钮时传递选择器。这是Button.m:
#import "CCButton.h"
@implementation CCButton
+(CCButton*) buttonFromImage:(NSString*)image selectedImage:(NSString*)selectedImage atPosition:(CGPoint)position selector:(SEL)selector_method
{
CCMenuItem *menuitem = [CCMenuItemImage itemFromNormalImage:image selectedImage:selectedImage target:self selector:selector_method];
menuitem.position = position;
CCButton *menu = [CCMenu menuWithItems:menuitem, nil];
menu.position = CGPointZero;
return menu;
}
@end
它继承自CCMenu。我想要做的是在创建我的按钮的地方定义选择器方法。例如,如果我有一个菜单,我希望选择器在菜单中,并将选择器分配给按钮(在menu.m中):
backButton = [CCButton buttonFromImage:@"image1.png" selectedImage:@"image2.png" atPosition:ccp(120,70) selector:@selector(backTouched:)];
[self addChild:backButton z:1];
...
- (void)backTouched:(id)sender {
//do what i want the button to do here
}
触摸按钮时崩溃。我如何实现我想要的?
感谢您的帮助, 戴夫
编辑:我得到的错误是错误的指针,SIGABRT
答案 0 :(得分:1)
目标不能是自我。目标必须是实现您创建的按钮的类。
在创建按钮时传入选择器时,还要传递按钮创建类的目标。
换句话说,target是包含您作为选择器传递的方法的类。
希望事情清楚明白:)
PS:这是你应该尝试的。请注意,您的buttonFromImage现在接受在创建后退按钮时设置的目标属性。你在buttonFromImage中设置的目标也不是self,而是来自buttonFromImage方法的目标。
@implementation CCButton
+(CCButton*) buttonFromImage:(NSString*)image selectedImage:(NSString*)selectedImage atPosition:(CGPoint)position selector:(SEL)selector_method target: (id)target
{
CCMenuItem *menuitem = [CCMenuItemImage itemFromNormalImage:image selectedImage:selectedImage target:target selector:selector_method];
menuitem.position = position;
CCButton *menu = [CCMenu menuWithItems:menuitem, nil];
menu.position = CGPointZero;
return menu;
}
@end
//*************************************************
backButton = [CCButton buttonFromImage:@"image1.png" selectedImage:@"image2.png" atPosition:ccp(120,70) selector:@selector(backTouched:) target:self];
[self addChild:backButton z:1];
//...
- (void)backTouched:(id)sender
{
//do what i want the button to do here
}
答案 1 :(得分:0)
有一些问题可能是问题,但它们都没有与传递选择器有关:
您正在传递self
(在类方法中是CCButton类)作为按钮的目标,但CCButton没有相应的类方法,而且几乎肯定不是对象你打算回应这个行动。
你的方法说它返回一个CCButton,但你实际上是在返回一个CCMenu。除非CCButton和CCMenu在结构上相同(即CCButton没有实例变量),否则这几乎可以保证导致崩溃,并且在任何情况下都是错误的。