2014-01-07 56 views
3

在擔心重新發明輪子的,我想知道:libGDX:如何實現一個平滑的瓷磚/網格遊戲角色運動?

什麼是實行自上而下瓷磚(2D)地圖libGDX在光滑的基於網格的遊戲角色移動的最佳方法?

只要按下箭頭鍵(或觸摸事件發生在角色的某個方向上),角色應該在瓷磚之間平穩地移動,並且應完成侷限於按鍵/觸摸釋放上的網格位置。該運動應該獨立於幀速率。

我會很高興對可以進行研究,並導致適當的libGDX API使用一些已經實施的例子。

回答

6

測試如果按下特定的按鈕(或屏幕觸摸),如果是,設置在現場的正確目標瓷磚(瓷磚,球員會去),並開始搬到那裏去,這個動作只會結束的時候,球員在下一個瓦片。發生這種情況時,再次檢查輸入以保持移動(即重複)。

讓我們假設,你的瓷磚寬/高爲1,要移動每秒1瓦。您的用戶按下右箭頭鍵。然後你只需將敵手設置在玩家正前方的瓦片上。

if(targettile!=null){ 
    yourobject.position.x += 1*delta; 
    if(yourobject.position.x>=targettile.position.x){ 
     yourobject.position.x = targettile.position.x; 
     targettile = null; 
    } 
} 

此代碼僅適用於正確的移動,您還需要爲其他方向進行編碼。
如果玩家沒有移動,不要忘記輪詢輸入。

編輯:

InputPolling鑰匙:

if (Gdx.input.isKeyPressed(Keys.DPAD_RIGHT)){ 

InputPolling爲沾上(凸輪是你的攝像頭,並且接觸點是一個的Vector3存儲未投影觸摸座標,和moverightBounds一(libgdx)矩形):

if (Gdx.input.isTouched()){ 
    cam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0)); 
    //check if the touch is on the moveright area, for example: 
    if(moveRightBounds.contains(touchPoint.x, touchPoint.y)){ 
     // if its not moving already, set the right targettile here 
    } 
} 

而且noone已經說過了,你得到的增量爲PA rameter在渲染方法,或者你可以得到其他任何地方使用:

Gdx.graphics.getDeltatime(); 

參考文獻:

+0

感謝您的幫助。你能解釋一下從哪裏調用該代碼以及如何執行輸入輪詢?此外,我不確定如何根據不斷變化的幀速率來計算「增量」。 –

+1

@JensPiegsa您可以通過LibGDX獲取Delta作爲render()方法中的參數。否則,您可以通過Gdx.graphics.getDeltaTime()獲取它。 – noone

+1

編輯我的回答:)你在渲染方法(每幀)中稱之爲 – Lestat

2

這僅僅是一個方面,但我希望你能這個想法通過檢查方向鍵並添加/減1,然後將其轉換爲int(或地板)將爲您提供下一個圖塊。如果您釋放密鑰,您仍然有未達到的目標,並且實體將繼續移動,直至到達目標圖塊。我認爲它看起來像這樣:

void update()(
    // Getting the target tile 
    if (rightArrowPressed) { 
     targetX = (int)(currentX + 1); // Casting to an int to keep 
             // the target to next tile 
    }else if (leftArrowPressed){ 
     targetX = (int)(currentX - 1); 
    } 

    // Updating the moving entity 
    if (currentX < targetX){ 
     currentX += 0.1f; 
    }else if (currentX > targetX){ 
     currentX -= 0.1f; 
    } 
} 
+0

這正是我在幾個小時前回答的......並且這使用了一個固定的步驟,而不是使用幀之間傳遞的時間來實現幀獨立運動。 – Lestat

+1

對不起,當我發佈我的回覆時,我的回答不可見。 –

+0

但是,感謝您的幫助! –