2012-01-03 6 views
1

Для того, чтобы построить игру с тик-таком-носом для тестирования, у меня есть следующая процедура. Но проблема в том, что я получаю слишком много событий только одним касанием. Я подозреваю, что isTouched() возвращает все вниз, вверх и перемещаться. Есть ли способ просто начать мероприятие?Получение ненужных событий касания от LIBGDX

ОБНОВЛЕНИЕ: Решено решить проблему, используя вместо этого justTouched().

@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; 
    } 

} 

ответ

1

Альтернативой использованию justTouched является реализация интерфейса InputProcessor, так как он имеет подкраски (х, у, указатель, кнопка), которая дает вам больший контроль над входом. Существует несколько классов, которые реализуют это, или вы можете реализовать свой класс.

0

Вы можете создать доску, например (с картой хэша), и каждый объект в вашей игре хочет быть кликабельным, добавив себя на эту доску, если объект был затронут и был на борту, он поймает событие. Если нет, это не поймает событие. Так легко! :)

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