2012-02-02 4 views
6

que estoy tratando de conseguir el deslizar a trabajar para Cocos2d versión más reciente aquí es mi código:Swiping en Coco2d

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

    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft]; 

    [swipeLeft setNumberOfTouchesRequired:1]; 

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


} 

No detecta el golpe a todos!

ACTUALIZACIÓN 1:

que actualiza el código a la siguiente y todavía no se detectan golpes.

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


} 

Respuesta

11

He tratado de hacer que esto funcione también, pero he encontrado un método más fácil y también mejor para controlar.

por lo que, por ejemplo, si quisiera detectar un deslizamiento a la izquierda, lo seguiría.

declarar dos variables de la interfaz de usted es la clase

CGPoint firstTouch; 
CGPoint lastTouch; 

En el método init de la implementación de su clase permiten toques

self.isTouchEnabled = YES; 

3.Add estos métodos a la clase

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

} 

El método "doStuff" es como se llama si se ha producido un deslizamiento hacia la izquierda.

+0

Prefiero usar el UIGestureRecognizer ya que es fácil crear diferentes tipos de eventos táctiles. – azamsharp

+2

¡esto es genio! –

3

El código es correcto y debería funcionar.

Es posible que desee comprobar que ni la entrada de usuario ni la entrada táctil están deshabilitadas en la vista gl o en la ventana principal.

También debe comprobar si cocos2d está comiendo los toques de alguna manera. La clase EAGLView es el primer receptor de los toques y los envía al CCTouchDispatcher. Me imagino que si has dirigido delegados táctiles, pueden "tragarse" los toques. Aunque cocos2d debería recibir los toques solo después de los reconocedores de gestos.

+0

Actualicé el código en mi pregunta original, pero todavía no se detectan los golpes. – azamsharp

Cuestiones relacionadas