我正在尝试制作一个基本的游戏,需要一个严格的按钮来控制玩家的移动。请记住我使用的是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的值添加到计时器上的精灵位置,仍然没有移动。
答案 0 :(得分:0)
请在提出有关崩溃的问题时始终包含崩溃日志。
在你的情况下,我可以猜出这个问题。您正在添加此选择器:
@selector(rightButtonPressed)
您的方法称为
rightButtonPressed:(id)sender
作为选择器,rightButtonPressed:
- 注意表示传递参数的冒号。更改方法以使其没有参数,或者在创建按钮时向选择器添加冒号。
崩溃日志会告诉你 - 它会说“无法识别的选择器发送到...”,其中包含接收类的名称和选择器的名称。