2012-02-02 5 views
6

Я пытаюсь получить Swiping работать Cocos2d последнюю версию здесь мой код:Смахивающее в Coco2d

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

    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft]; 

    [swipeLeft setNumberOfTouchesRequired:1]; 

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


} 

Он не обнаруживает удар на всех!

UPDATE 1:

Я обновил код на следующий и еще не пойло не обнаружены.

-(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]; 


} 

ответ

11

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

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

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

CGPoint firstTouch; 
CGPoint lastTouch; 

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

self.isTouchEnabled = YES; 

3.Add эти методы к классу

-(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» - это то, что вызывается, если произошло левое салфетки.

+0

Я предпочитаю использовать UIGestureRecognizer, так как легко создавать различные события касания. – azamsharp

+2

это гений! –

3

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

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

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

+0

Я обновил код в своем исходном вопросе, но все же удары не обнаружены. – azamsharp

Смежные вопросы