Продолжительность нажатия в cocos2d - PullRequest
4 голосов
/ 02 декабря 2011

Есть идеи, как обрабатывать длительность нажатия в cocos2d?

Мне нужно что-то сделать после того, как пользователь удерживает палец на определенном спрайте в течение 1-2 секунд.

Спасибо.

Ответы [ 3 ]

1 голос
/ 02 декабря 2011

Сохраните много ручной работы и используйте UIGestureRecognizer для подобных вещей.В этом конкретном случае вы захотите использовать UILongPressGestureRecognizer .

Кстати, распознаватели жестов встроены и готовы к использованию , если вы используете Kobold2D .

1 голос
/ 02 декабря 2011

Вам нужно сделать это вручную:

  1. Добавьте флаг BOOL ivar и floar ivar в свой подкласс CCLayer.
  2. При касании началось, установите флаг в значение ИСТИНА и сбросьте плавающий ivar в 0.0
  3. При перемещении, завершении или отмене касания установите флаг на ЛОЖЬ.
  4. В update или tick увеличьте значение плавающего ивара на величину dt. Проверьте, соответствует ли это значение с плавающей точкой ivar для выполнения вашей логики, если оно больше вашего порогового значения (1,0 или 2,0 секунды).

Если вы хотите обрабатывать несколько касаний, вам может понадобиться способ прикрепить и дифференцировать комбинацию флага BOOL и плавающего ивара для каждого касания.

Я бы предложил создать промежуточный подкласс между CCLayer и вашим подклассом реализации, чтобы вы могли скрыть механизм от подкласса реализации, а также позволить легкое повторное использование.

0 голосов
/ 05 декабря 2011

Чтобы использовать UILongPressGestureRecognizer, вы можете сделать что-то вроде этого:

UILongPressGestureRecognizer* recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressFrom:)];
recognizer.minimumPressDuration = 2.0; // seconds
AppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.viewController.view addGestureRecognizer:recognizer];

Ваш обработчик длинных нажатий может выглядеть так:

-(void)handleLongPressFrom:(UILongPressGestureRecognizer*)recognizer
{
    if(recognizer.state == UIGestureRecognizerStateEnded)
    {
        CCLOG(@"Long press gesture recognized.");

        // Get the location of the touch in Cocos coordinates.
        CGPoint touchLocation = [recognizer locationInView:recognizer.view];
        CCDirector* director = [CCDirector sharedDirector];
        touchLocation = [director convertToGL:touchLocation];
        touchLocation = [[director runningScene] convertToNodeSpace:touchLocation];

        // Your stuff.
    }
}

Когда вы закончите, не забудьте удалить его.

AppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.viewController.view removeGestureRecognizer:recognizer];
...