2016-12-08 63 views
0

可能這將是一個非常基本的問題,但作爲一個新手,我很困惑它。通過單鍵觸摸移動物體 - Libgdx

在我的libGDX Project中,我想移動播放器。 最初玩家在左邊。對於第一個水龍頭玩家應該移動到另一邊並佔據那裏的位置。爲了下一個水龍頭,它應該移動到左邊並且將繼續如此。

我實現了這個邏輯。現在的問題是,我的播放器並沒有動,只是在tap上佔據了相反的位置。我使用了速度值,但它對代碼沒有任何影響。

我想讓它沿途移動,而不僅僅是佔據位置。 請幫忙。

public float ninjaX = Constants.W_WIDTH; 
public float ninjaY =Constants.WORLD_HEIGHT/2+Constants.WORLD_HEIGHT/4; 
public float ninjaVelocity =100f; 
public boolean isLeftBool=true; 

public void ninjaMove() { 
    if (isLeftBool) { 


      ninjaX = ninjaX+ ninjaVelocity; 
      setPosition(Constants.WORLD_WIDTH - (Constants.W_WIDTH+Constants.PLAYER_HEIGHT/2), ninjaY); 

     isLeftBool = false; 

    } 
    else 
    { 
     ninjaX=ninjaX-ninjaVelocity; 
     setPosition(ninjaX,ninjaY); 
     isLeftBool = true; 
    } 

} 

更新播放器在渲染:

if (MyInputProcessor.isTap) { 
     MyInputProcessor.isTap = false; 
     ninja.ninjaMove(); 

    } 

回答

3

您的播放器座標的變化應取決於增量時間:

X1 = X0 + v

X1 - 是新的座標

X0 - 是當前座標

v - 速度

Δ - 時間跨度X0和X1之間

LibGDX provides的方法來獲取當前的和最後一個幀之間的時間跨度:

Gdx.graphics.getDeltaTime();

因此,相應地改變你的代碼應該讓你的播放器平滑地移動(取決於速度):

ninjaX = ninjaX + ninjaVelocity * Gdx.graphics.getDeltaTime(); 

的減法同樣的事情在你的其他塊。

你也可能需要設置x座標(ninjaX)以及Y(目前你不過去你setPosition兩種方法):

setPosition(ninjaX, ninjaY); 

*我猜這裏是因爲我不知道什麼方法

0

這只是你如何解決這個問題的一個例子。 你不解釋setPosition()是什麼以及它爲什麼被調用,所以我會忽略它。

在渲染():

public void render(float delta){ 
    .... 
    ninja.update(delta); 
} 

在你Ninja.class

private final Vector2 leftPos = new Vector(20, 60); 
private final Vector2 rightPos = new Vector(80, 60); 
private Rectangle bound = new Rectangle(80,60,32,32); 
private Vector2 currentPos; 
private float moveSpeed = 100f; 

public Ninja(){ 
    currentPos = leftPos; 
} 

public void update(float delta){ 
    if(bound.x > currentPos.x)bound.x += moveSpeed * delta; 
    else bound.x -= moveSpeed * delta; 
} 

public void move(){ 
    if(currentPos == leftPos)currentPos = rightPos; 
    else currentPos = leftPos; 
} 

然後在着陸你輸入處理器調用ninja.move()()的

無這是測試。

您需要將deltaSpeed與delta時間相乘的原因是使運動獨立於fps。無論遊戲運行多少幀,忍者都會在同一時間移動相同的距離。