2016-04-27 9 views
0

小惑星がスクリーンの上端からランダムxの位置でスポーンされていたLibGDXでゲームを作っています。小惑星が画面の下端を残すと、小惑星は徐々に0.1fの速度増分で移動します。再利用するプールに送信されます。私が持っている問題は、しばらくしてプールから来た小惑星の速度が異なることです。私はすべての小惑星が同じ緩やかな速度で動くようにしたい。ここプールから来るオブジェクトで同じ徐々に速度を増やす方法はありますか?

が更新され、私の小惑星クラスのメソッドをリセットします。

public void update(float delta){ 
    y -= speed * delta; 
    speed += 0.1f; 
} 

@Override 
public void reset() { 
    // place asteroid at random x position 
    x = MathUtils.random(minSpawnPoint, maxSpawnPoint); 

    // place asteroid above screen edge 
    y = Constants.CAMERA_HEIGHT + Constants.ASTEROID_MAX_SIZE; 

} 
+0

xとyの位置のようにどこかの速度をリセットする必要があります。リセットメソッドのどこかにspeed = initialを入れます。私はそれが意図的なのかどうか分からないが、あなたの小惑星に加速があるように、更新刻みごとに速度を増やしている。 – Barodapride

+0

小惑星は同じ速度で加速しているはずです。私が持っている問題は、彼らが異なる加速率を持っているということです。 – Harry

+0

あなたがプールから再利用する小惑星は、スピードをどこにでもリセットすることがないので、初期速度が速くなります。 – Barodapride

答えて

1

私はあなたが求めているものを理解していれば、あなたがそのよう小惑星のすべてが同時に遅く出始めるとスピードを向上させたいです小惑星は常に同じ速度を持ちます。

この場合、各小惑星がその位置を更新するために使用するグローバル速度変数(小惑星クラスの外に)を1つだけ持つ必要があります。各小惑星はそれ自身のローカル速度変数を維持することができません。なぜなら、特定の小惑星が長くなるほど速度が上がるからです。これは、小惑星が画面上にどれくらいの時間がかかっているかによって異なる速度を持つようになります。

これを修正するには、速度変数を小惑星プールを保持するクラスに移動します。その後、速度にデルタ時間を掛けてy(deltaY)の変化を計算し、この値の値をすべての小惑星に渡します。

これで、各小惑星が更新メソッドでデルタ時間を取る代わりに、y位置の変更が行われ、それに応じてこの値を使用して小惑星の位置を更新することができます。

public void update(float deltaY){ 
    y -= deltaY; 
    ... 
} 
+0

のようにそれは私が達成したいのですが、私は小惑星のプールクラスからyの変化を計算する必要がありますか? 「あなたのすべての小惑星にこの値を渡す」と言うと、小惑星クラスの値を渡すことを意味しますか? – Harry

+1

あなたのレンダリング方法では、asteroid.setSpeed(スピード) – Barodapride

+0

をそれぞれ実行できます。スピード変数をゲーム画面に移動してレンダリングメソッドで更新しました。 – Harry

関連する問題