0

我正在尝试制作一个需要大量按钮来控制玩家移动的基本游戏。请记住,我使用的是 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 的值添加到计时器上精灵的位置,但仍然没有运动。

4

1 回答 1

0

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

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

@selector(rightButtonPressed)

你的方法被称为

rightButtonPressed:(id)sender

作为选择器,这将是rightButtonPressed:- 请注意指示参数已传递的冒号。要么更改方法,使其没有参数,要么在创建按钮时向选择器添加一个冒号。

崩溃日志会告诉你这一点——它会说“无法识别的选择器发送到...”,并带有接收类的名称和选择器的名称。

于 2013-01-23T22:39:18.137 回答