天天看點

9.2.1、Libgdx的輸入處理之輪詢

輪詢是檢測輸入裝置的目前狀态,比如特定的按鍵按下,螢幕第一個手指的位置等等。這是一個快速簡單的處理使用者輸入的方式,并且應用到很多的遊戲中。

注意:如果你處理輪詢,可能會丢失事件。如果最好采用事件處理。

輪詢鍵盤輸入可以通過簡單的一行代碼實作:

boolean isAPressed = Gdx.input.isKeyPressed(Keys.A);

傳遞給方法的值就是我們上一篇提到的Key Code,可以查閱上一篇文章檢視相關鍵值。

輪詢觸摸和滑鼠輸入,這裡有一系列的方法。要檢測一個或多個點按下(等同滑鼠單擊),可以使用如下代碼:

boolean isTouched = Gdx.input.isTouched();

對于多點觸摸來說可以判斷某一個觸摸點是否釋放與否:

// 傳回目前是否被觸摸 boolean firstFingerTouching = Gdx.input.isTouched(0); boolean secondFingerTouching = Gdx.input.isTouched(1); boolean thirdFingerTouching = Gdx.input.isTouched(2);

每個手指在螢幕上按下都會獲得一個指針索引。第一個手指獲得0,接下來為1等等。如果一個手指離開螢幕。指針索引将被釋放。

第一個手指按下> 指針索引為0.

第二個手指按下>指針索引為1

第三個手指按下>指針索引為2

第二個手指釋放>指針索引1釋放

第一個手指釋放>指針索引0釋放,現在隻有指針索引2可用

另外的一個手指按下>指針索引為0.

在桌面和浏覽器中隻支援單點,也就是同時隻能按下一個“手指”。

如果你想檢測使用者是否按下和釋放某個手指,可以使用如下方法:

// 将傳回螢幕剛剛是否被觸摸 boolean justTouched = Gdx.input.justTouched();

這可以用于快速檢測是否觸發觸摸操作。比如“點選螢幕繼續”。需要注意的是,它是基于輪詢,是以結果可能不準确。

擷取相關坐标可以使用如下代碼:

int firstX = Gdx.input.getX(); int firstY = Gdx.input.getY(); int secondX = Gdx.input.getX(1); int secondY = Gdx.input.getY(1);

這樣就擷取了指針索引0(0為預設)的坐标和指針索引1的坐标。

在桌面環境下你可以通過如下代碼檢測滑鼠按鍵是否被按下:

boolean leftPressed = Gdx.input.isButtonPressed(Input.Buttons.LEFT); boolean rightPressed = Gdx.input.isButtonPressed(Input.Buttons.RIGHT);

需要注意的是,在android中我們僅僅模拟滑鼠左鍵單擊。任何觸摸事件将視為滑鼠單擊。觸摸螢幕顯然沒有滑鼠左右鍵的概念。

繼續閱讀