2012-02-02 10 views
6

Próbuję uzyskać przeciągnięcia do pracy Cocos2d najnowszej wersji Tu jest mój kodu:Swiping w Coco2d

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

    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft]; 

    [swipeLeft setNumberOfTouchesRequired:1]; 

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


} 

To nie wykrywa bezstykowa w ogóle!

UPDATE 1:

I uaktualniony kod do następujących elementów i nadal nie zostały wykryte żadne kiepskie piwo.

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


} 

Odpowiedz

11

Próbowałem również wykonać tę pracę, ale znalazłem łatwiejszą, a także lepiej kontrolującą metodę.

, więc na przykład, jeśli chcesz wykryć przesunięcie w lewo, tak to zrobię.

Zadeklaruj dwie zmienne w interfejsie jesteś klasa

CGPoint firstTouch; 
CGPoint lastTouch; 

W metodzie init realizacji swojej klasie umożliwić dotyka

self.isTouchEnabled = YES; 

3.Add te metody do klasy

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

} 

Metoda "doStuff" jest tak zwana, jeśli wystąpił ruch lewy.

+0

Wolę korzystać z UIGestureRecognizer, ponieważ łatwo jest tworzyć różnego rodzaju zdarzenia dotykowe. – azamsharp

+2

to jest geniusz! –

3

Kod jest poprawny i powinien działać.

Możliwe, że chcesz sprawdzić, czy ani interakcja użytkownika, ani wejście dotykowe nie są wyłączone w widoku gl lub w oknie głównym.

Należy również sprawdzić, czy cocos2d jakoś je dotyka. Klasa EAGLView jest pierwszym odbiorcą dotknięć i przekazuje je do CCTouchDispatchera. Mogę sobie wyobrazić, że jeśli masz celowanych delegatów dotykowych, mogą "połknąć" dotknięcia. Chociaż cocos2d powinien otrzymać dotknięcia dopiero po rozpoznaniu gestu.

+0

Zaktualizowałem kod w oryginalnym pytaniu, ale nadal nie są wykrywane przesunięcia. – azamsharp