Как мне активировать - (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];
}
2
Crazycriss 13 Мар 2014 в 05:22

1 ответ

Лучший ответ

Боюсь, для этого нет 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, в котором вы переопределяете методы touchUpInside и touchEntered. Но поскольку они не являются общедоступными, вам придется создать заголовок CCButton_Protected.h, в который вы импортируете свой обычный заголовок CCButton, и поместить туда сигнатуры частных методов, которые вы хотите переопределить.

5
Tibor Udvari 13 Мар 2014 в 23:47
Я решил пойти грязным путем, потому что хотел, чтобы все кнопки делали это, спасибо! : D
 – 
Crazycriss
15 Мар 2014 в 04:24
Пожалуйста. Когда у вас будет время, я бы предложил реализовать правильное решение, в основном потому, что оно вызовет проблемы, когда вы захотите обновить Cocos. Вам придется заново реализовать эти изменения, если вы хотите продолжать использовать «грязное» решение.
 – 
Tibor Udvari
15 Мар 2014 в 14:48
У меня другой вопрос, как сделать так, чтобы действие происходило только при нажатой кнопке?
 – 
Crazycriss
16 Мар 2014 в 00:16
Переопределить касание Введено для запуска действия
 – 
Tibor Udvari
16 Мар 2014 в 02:05
1
Удвари: отличный ответ!
 – 
lsmpascal
26 Мар 2014 в 16:16