получение ненужных событий касания от LIBGDX

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

ОБНОВЛЕНИЕ: проблема решена путем использования вместо этого функции 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;
    }

}

person Tae-Sung Shin    schedule 03.01.2012    source источник


Ответы (2)


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

person Doran    schedule 03.01.2012

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

person Hamed Nova    schedule 14.03.2013