2016-05-10 12 views
0

私はLibGDXを使ってCanabaltのようなゲームをJAVAで作成しようとしていますが、ゲームでは、プレーヤーは同じ位置にとどまりながら右から左に加速します。間隔は毎秒1ずつ増加し、速度は0.15f :ゲームの加速に合わせて距離を変更するにはどうすればよいですか?

public void update(float delta){ 
    timeState += delta; 
    speed += 0.15f; 

    if(timeState >= 1){ 
     timeState = 0f; 
     distance += 1; 
    } 

    if (speed > MAX_SPEED) speed = MAX_SPEED; 

} 

しかし、私は距離が一定であることを望んでいません。私はそれを速度に対して相対的に変更したいと思います。速度が上がるにつれて、距離も速く増加し始めます。最大速度に達すると、距離の増分も一定でなければなりません。どのように私はそれを達成することができますか?

+2

'distance + = speed'? – resueman

+1

'スピード+ =アクセラレーション*デルタ' '距離+ =スピード*デルタ ' – Tenfour04

+0

最初のスピードは1000ですから、距離も1000で始まります。私は距離が0から始まるようにします。 – Harry

答えて

0

は、私はdistanceをカバー真の距離、のようなものを表す持っている、おそらくより簡単だと思います回避策。

distanceはfloat型にする必要があります((int)distanceのように)これを切り捨てて上記のコードから必要と思われる整数値のままにしておきます。

+0

@HarryBandaちょうどあなたがコメントでこれを解決したことを見た、多分それを解決としてマークするための答えを受け入れる - あなたはいつも自分の答えを書くことができます。 – rbennett485

+0

私のスピードは0で始まらないが、 'distance + = speed * delta 'と書くと、距離はゼロではなく1000で始まります。ゲームでは、距離はスコアです、私はそれのために非常に大きな数字を望んでいません。 – Harry

+1

いいえ、あなたのデルタはおそらく1未満になります。あなたの距離を '実際の'距離のスケーリングされたバージョンにしたい場合は、距離+ = 0.1 *速度*デルタ – rbennett485

0

数学関数を使用する対数は、あなたの速度が限界に達し、距離も同じ経路を使用するので、効果はより滑らかになるはずです。

public void update(float delta){ 
    distance += speed * delta; // distance = speed * time 
    speed += 0.15f; 

    if (speed > MAX_SPEED) speed = MAX_SPEED; 
} 

あなたの変数は、実際にかなりfudgy timestateを使用することよりも、ゲーム内で何が起こっているかを反映していること方法:

+0

どうすればいいのですか? – Harry

関連する問題