Смахивание в Coco2d - PullRequest
       5

Смахивание в Coco2d

6 голосов
/ 02 февраля 2012

Я пытаюсь заставить работать свайп для последней версии Cocos2d, вот мой код:

-(void) setupGestureRecognizers 
{
    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeft)];

    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];

    [swipeLeft setNumberOfTouchesRequired:1];

    [[[CCDirector sharedDirector] openGLView] addGestureRecognizer:swipeLeft];


}

Он вообще не обнаруживает свип!*

Я обновил код до следующего, и до сих пор не обнаружены пролистывания.

-(void) setupGestureRecognizers 
{
    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeft)];

    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];

    [swipeLeft setNumberOfTouchesRequired:1];

    [[[[CCDirector sharedDirector] openGLView] window] setUserInteractionEnabled:YES];

    [[[CCDirector sharedDirector] openGLView] setUserInteractionEnabled:YES];
    [[[CCDirector sharedDirector] openGLView] addGestureRecognizer:swipeLeft];


}

Ответы [ 2 ]

11 голосов
/ 02 февраля 2012

Я тоже пытался сделать эту работу, но я нашел более простой, а также лучший способ управления.

так, например, если вы хотите обнаружить движение влево, я бы такследующие.

Объявите две переменные в интерфейсе вашего класса

CGPoint firstTouch;
CGPoint lastTouch;

В методе init реализации вашего класса enable прикосновения

self.isTouchEnabled = YES;

3.Добавьте эти методы в ваш класс

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSSet *allTouches = [event allTouches];
    UITouch * touch = [[allTouches allObjects] objectAtIndex:0];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    //Swipe Detection Part 1
    firstTouch = location;
}

-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSSet *allTouches = [event allTouches];
    UITouch * touch = [[allTouches allObjects] objectAtIndex:0];
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    //Swipe Detection Part 2
    lastTouch = location;

    //Minimum length of the swipe
    float swipeLength = ccpDistance(firstTouch, lastTouch);

    //Check if the swipe is a left swipe and long enough
    if (firstTouch.x > lastTouch.x && swipeLength > 60) {
        [self doStuff];
    }

}

, метод "doStuff" вызывается, если произошел левый удар.

3 голосов
/ 02 февраля 2012

Код правильный и должен работать.

Возможно, вы захотите убедиться, что ни пользовательское взаимодействие, ни сенсорный ввод не отключены в окне gl или главном окне.

Вы также должны проверить, ест ли cocos2d какие-то штрихи. Класс EAGLView является первым получателем касаний и передает их в CCTouchDispatcher. Я могу представить, что если вы нацелены на делегатов касания, они могут «проглотить» касания. Хотя cocos2d должен получать прикосновения только после распознавателей жестов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...