2016-04-29 3 views
1

私は達成する必要があることを説明しようとします。libGDX - 特定の位置でのプレーヤーの動きを止めるには?

プレイヤーは0、0の位置から開始します。 画面に触れると、プレイヤーが上がり始めます。 そして、プレーヤーがY軸の特定の位置にいるとき(私は200と言う)、私は彼が移動を停止したい。

私は、画面をタッチすると、このメソッドが呼び出されます。

public void move() { 
    if (player.getPosition().y < 200) { 
     player.velocity.set(0, 100); 
    } 

そして、私が持っている私のプレイヤーの更新方法で:

 if (player.getPosition().y > 200) { 
     player.position.set(0, 200); 
     player.velocity.set(0, 0); 
    } 

これで問題があれば、私は中に速度を設定することですメソッドを1000のようなものに移動すると、200以上のプレイヤーの位置でレンダリングされた1つのフレームがあります。それから、それを200に変更してそこにとどまります。

私は更新方法でこれを試してみました:

if (player.getPosition().y == 200) { 
player.velocity.set(0, 0); 

}

しかし、プレイヤーの位置は常に200で、200.1257または200.54578

のようないくつかの乱数ため、この文は真なることはありません

私はすべてのあなたの答えを感謝します!

答えて

0

あなたはこのような整数にキャストすることができます

if ((int)player.getPosition().y == 200) { 
    player.velocity.set(0, 0); 
} 

しかし、あなたのプレイヤーが高速であれば、それは200をスキップして上に行く可能性があるため、私はそれをお勧めしませんが、私はに正しいことを考えますやる今、あなたはsの上に複数のベクトルをしたい場合

if (player.getPosition().y > 200) { 
     player.velocity.set(0, 0); 
     player.setPosition(new Vector2(player.getX,200)); 
} 

あなたはあなたのプレイヤーが行っている場所を予測し、プレーヤーのための滑らかな感触のためにもdeaccelerationを計算することができます。..

ですクレンは、このようにプレイヤーと画面上のポイントとの距離を計算するのがベストです:

//If the player is 20 units closer than the point 200,200 do something 
    if(player.getPosition().dst2(new Vector2(200,200) < 20){ 
     //do something 
    } 
関連する問題