按下按钮时的操作Cocos2d 3.0

时间:2014-03-13 01:22:35

标签: button cocos2d-iphone

当按下 按钮时,如何触发- (void)onRightButtonClicked:(id)sender,而不是 按下(放开)时。

这是按钮的代码

rightButton = [CCButton buttonWithTitle:@"" spriteFrame:[CCSpriteFrame frameWithImageNamed:@"right.png"]];
rightButton.position = ccp(self.contentSize.width/3.65, self.contentSize.height/10);
[rightButton setTarget:self selector:@selector(onRightButtonClicked:)];
[self addChild:rightButton];

然后按下按钮后会发生什么。

- (void)onRightButtonClicked:(id)sender
{
CCActionAnimate *animationAction = [CCActionAnimate actionWithAnimation:walkAnim];
CCActionRepeatForever *repeatingAnimation = [CCActionRepeatForever actionWithAction:animationAction];
[dino runAction:repeatingAnimation];
}

1 个答案:

答案 0 :(得分:5)

我担心那个没有1-2个班轮,如果你检查CCButton.m你可以看到什么时候触发了行动

- (void) touchUpInside:(UITouch *)touch withEvent:(UIEvent *)event
{
    [super setHitAreaExpansion:_originalHitAreaExpansion];

    if (self.enabled)
    {
        [self triggerAction];
    }

    self.highlighted = NO;
}

真的很脏的quickfix

如果您希望游戏中的所有按钮都有此行为,请将[self triggerAction]移至- (void) touchEntered:(UITouch *)touch withEvent:(UIEvent *)event中的CCButton

优雅的解决方案

创建CCButton的自定义子类,您可以覆盖touchUpInsidetouchEntered方法。但由于这些不公开,您必须创建一个CCButton_Protected.h标头,您可以在其中导入普通的CCButton标头,并将要覆盖的私有方法签名放在那里。