2016-09-05 53 views

回答

0

對於用戶輸入,您應該使用InputProcessor

如果你想要寫匿名然後show方法,你應該寫

: -

Gdx.input.setInputProcessor(new InputProcessor() { 

     @Override 
     public boolean touchUp(int arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean touchDragged(int arg0, int arg1, int arg2) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean touchDown(int arg0, int arg1, int arg2, int arg3) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean scrolled(int arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean mouseMoved(int arg0, int arg1) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean keyUp(int arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean keyTyped(char arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean keyDown(int arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 
    }); 

也可以實現輸入處理器和setInputProcessor註冊實例。 例子: -

 public class InputTest implements InputProcessor { 

@Override 
public boolean keyDown(int arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean keyTyped(char arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean keyUp(int arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean mouseMoved(int arg0, int arg1) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean scrolled(int arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean touchDown(int arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean touchDragged(int arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public boolean touchUp(int arg0, int arg1, int arg2, int arg3) { 
    // TODO Auto-generated method stub 
    return false; 
} 

}

在屏幕類的顯示方法

你應該寫: -

public void show() { 

    Gdx.input.setInputProcessor(new InputTest()); 
} 
在我的建議

這兩個是拿用戶的輸入,如果你的最佳途徑沒有使用階段。 希望這會對你有用。

0

這取決於用例。你爲什麼需要它,需要做什麼event drivencontinuous

例如,如果你想同時某個鍵被按下屏幕上移動精靈,那麼這是一個連續動作:

@Override public void render() { 
    if (Gdx.input.isKeyPressed(Input.Keys.SPACE)) 
     sprite.translateX(speed * Gdx.graphics.getDeltaTime()); 
    ... 
} 

但是,如果例如想改變顏色用戶按下某個鍵,那麼這就是一個事件:

@Override public void create() { 
    Gdx.input.setInputProcessor(new InputAdapter() { 
     @Override public boolean keyUp (int keycode) { 
      if (keycode == Input.Keys.SPACE) 
       sprite.setColor(Color.RED); 
     } 
    }); 
    ... 
} 

注意查詢是一個建立在事件之上的便捷方法,它是你自己很容易說。像這樣:

private boolean moving; 
@Override public void create() { 
    Gdx.input.setInputProcessor(new InputAdapter() { 
     @Override public boolean keyDown (int keycode) { 
      if (keycode == Input.Keys.SPACE) 
       moving = true; 
     } 
     @Override public boolean keyUp (int keycode) { 
      if (keycode == Input.Keys.SPACE) 
       moving = false; 
     } 
    }); 
    ... 
} 

@Override public void render() { 
    if (moving) 
     sprite.translateX(speed * Gdx.graphics.getDeltaTime()); 
    ... 
} 

這常常讓你寫出更乾淨,用例特定的代碼,就像這樣:

private float speed; 
@Override public void create() { 
    Gdx.input.setInputProcessor(new InputAdapter() { 
     @Override public boolean keyDown (int keycode) { 
      switch (keycode) { 
       case Input.Keys.LEFT: speed -= 10f; break; 
       case Input.Keys.RIGHT: speed += 10f; break; 
      } 
     } 
     @Override public boolean keyUp (int keycode) { 
      switch (keycode) { 
       case Input.Keys.LEFT: speed += 10f; break; 
       case Input.Keys.RIGHT: speed -= 10f; break; 
      } 
     } 
    }); 
    ... 
} 

@Override public void render() { 
    sprite.translateX(speed * Gdx.graphics.getDeltaTime()); 
    ... 
} 

考慮到這一點,它可以在許多情況下,最好使用事件驅動輸入處理。但是,如果您發現自己使用了很多boolean標誌,那麼您還可以使用內置輸入輪詢。

相關問題