1

为了构建一个井字游戏进行测试,我有以下例程。但问题是我得到了太多的事件,只需轻轻一按。我怀疑 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;
    }

}
4

2 回答 2

1

使用 justTouched 的替代方法是实现InputProcessor接口,因为它有一个 touchUp(x,y,pointer,button) 可以让您更好地控制输入。有几个类实现了这个,或者你可以让你的类实现它。

于 2012-01-03T14:25:32.757 回答
0

例如,您可以创建一个棋盘(带有散列图),并且游戏中的每个对象都希望可点击,如果一个对象被触摸并且在棋盘中,它将自己添加到该棋盘中,它将捕获事件。如果不是,它将无法捕获该事件。太简单!:)

于 2013-03-14T15:06:52.497 回答