按钮与(id)发件人崩溃应用程序

时间:2013-01-23 22:18:23

标签: xcode cocos2d-iphone

我正在尝试制作一个基本的游戏,需要一个严格的按钮来控制玩家的移动。请记住我使用的是cocos-2d。我的目标是让按钮可以按住并在按下时移动精灵。我现在使用的代码看起来像这样。

CCMenuItemHoldable.h

@interface CCMenuItemSpriteHoldable : CCMenuItemSprite {
    bool buttonHeld;
}

@property (readonly, nonatomic) bool buttonHeld;

CCMenuItemHoldable.m

@implementation CCMenuItemSpriteHoldable

@synthesize buttonHeld;

-(void) selected
{
    [super selected];
    buttonHeld = true;
    [self setOpacity:128];
}

-(void) unselected
{
    [super unselected];
    buttonHeld = false;
    [self setOpacity:64];
}

@end

以及设置按钮

rightBtn = [CCMenuItemSpriteHoldable itemFromNormalSprite:[CCSprite spriteWithFile:@"art/hud/right.png"] selectedSprite:[CCSprite spriteWithFile:@"art/hud/right.png"] target:self selector:@selector(rightButtonPressed)];


CCMenu *directionalMenu = [CCMenu menuWithItems:leftBtn, rightBtn, nil];
[directionalMenu alignItemsHorizontallyWithPadding:0];
[directionalMenu setPosition:ccp(110,48)];
[self addChild:directionalMenu];

这一切似乎都很好但是当我做的时候

-(void)rightButtonPressed:(id) sender
{

    if([sender buttonHeld])
            targetX = 10; 
        else{
            targetX = 0; 
        }   
}

崩溃已经修复,但我试图让我的精灵移动。在我的游戏刻度函数中,我将targetX的值添加到计时器上的精灵位置,仍然没有移动。

1 个答案:

答案 0 :(得分:0)

请在提出有关崩溃的问题时始终包含崩溃日志。

在你的情况下,我可以猜出这个问题。您正在添加此选择器:

@selector(rightButtonPressed)

您的方法称为

rightButtonPressed:(id)sender

作为选择器,rightButtonPressed: - 注意表示传递参数的冒号。更改方法以使其没有参数,或者在创建按钮时向选择器添加冒号。

崩溃日志会告诉你 - 它会说“无法识别的选择器发送到...”,其中包含接收类的名称和选择器的名称。