2012-01-03 4 views
1

Afin de construire un jeu de tic-tac-toe pour les tests, j'ai la routine suivante. Mais le problème est que je reçois trop d'événements pour une seule touche. Je soupçonne isTouched() de retourner tout en bas, en haut et en mouvement. Y a-t-il un moyen de se réveiller?obtenir des événements tactiles inutiles de LIBGDX

MISE À JOUR: Résolu le problème en utilisant justTouched() à la place.

@Override 
public void render() { 
    // we update the game state so things move. 
    updateGame(); 

    // First we clear the screen 
    GL10 gl = Gdx.graphics.getGL10(); 
    gl.glViewport(0, 0, width, height); 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

    // Next we update the camera and set the camera matrix 
    camera.update(); 
    camera.apply(Gdx.gl10); 


    ...  
} 
private void updateGame() { 
    // the delta time so we can do frame independant time based movement 
    float deltaTime = Gdx.graphics.getDeltaTime(); 


    // Has the user touched the screen? then position the paddle 
    if (Gdx.input.isTouched() && !isProcess) { 
     // get the touch coordinates and translate them 
     // to the game coordinate system. 
     isProcess=true; 
     int width = Gdx.graphics.getWidth(); 
     int height = Gdx.graphics.getHeight(); 
     int offx=-width/2; 
     int offy=-height/2; 
     float x = Gdx.input.getX(); 
     float y = Gdx.input.getY(); 
     float touchX = 480 * (x 
       /(float) width - 0.5f); 
     float touchY = 320 * (0.5f - y 
       /(float) height); 
     for(int i=0;i<3;i++) { 
      for(int j=0;j<3;j++) 
      { 
       if(touchX >= offx+i*width/3 && touchX < offx+(i+1)*width/3 && 
         touchY >= offy+j*height/3 && touchY < offy+(j+1)*height/3) 
       { 
        if(isCurrentO) 
         data[i][j]=CellStatus.O; 
        else 
         data[i][j]=CellStatus.X; 
        isCurrentO=!isCurrentO; 
        break; 
       } 
      } 
     } 
     isProcess=false; 
    } 

} 

Répondre

1

Une alternative à l'utilisation justTouched est d'implémenter l'interface InputProcessor, car il a un Touchup (x, y, pointeur, bouton) qui vous permet de mieux contrôler l'entrée. Il existe plusieurs classes qui implémentent cela ou vous pouvez demander à votre classe de l'implémenter.

0

Vous pouvez créer une planche par exemple (avec une carte de hachage) et chaque objet de votre jeu doit être cliquable pour s'ajouter à celui-ci si un objet a été touché et qu'il était dans le tableau. Sinon, il n'attrapera pas l'événement. Si facile! :)

Questions connexes