2016-05-17 7 views
0

私はJavaで小さなゲームを組み立てていますが、私が遭遇した問題の1つは、プレイヤーキャラクターの移動速度が上がるにつれてアニメーションのスピードが上がることです。1つの変数をもう一つ増やす

アニメーションの速度を上げるには、アニメーションの各フレームが表示される時間を、最も遅いスピードの場合は「0.2」、最高スピードの場合は「0.1」の最大値から減らす必要があります。

私の現在のコードは動作しますが、はっきり少し不器用です。残念ながら、私はそれを置き換えるためのエレガントなソリューションを考えることはできません。

public float getAnimationSpeed() 
{ 
    float _absVel = Math.abs(_vel.x); 

    if(_absVel > 10 && _absVel <= 50) 
    { 
     return 0.1f; 
    } 
    else if(_absVel > 50 && _absVel <= 150) 
    { 
     return 0.075f; 
    } 
    else if(_absVel > 150) 
    { 
     return 0.05f; 
    } 
    else 
    { 
     return 0f; 
    } 
} 

あなたは機能もまだ(例えば、プレイヤキャラクタが0の速度を持っている場合、アニメーションが再生されてはならない)ようなアニメーションを表示するために使用され、ゼロを返すことがわかります。

答えて

2

あなたは代わりに「ステップ」との推論を、よりダイナミックになります

public float getAnimationSpeed() 
{ 
    float _absVel = Math.abs(_vel.x); 
    float offset = 0; //whatever you want 

    if(_absVel<=10){ 
     return 0f; 
    } 
    else{ 
     return ((1/_absVel)+offset)f; 
    } 
} 

あなたはもちろん、「1」に変更し、あなたが望む結果と一致して別の値にオフセットすることができます。

私はそれが助けて欲しい!

PS /おそらく、結果が最大値を超えているか、最小値を下回っているかどうかをチェックしたいと思うかもしれません。

+0

'MathUtils.clamp()'を使用して、最大と最小の間の最終アニメーション値を固定することができます – Zac

+0

これははるかに良い解決策に見える、ありがとう! 1つの質問、オフセットの仕組みを簡単に説明できますか? –

+0

オフセットを使用すると、結果を必要に応じて調整できます。 たとえば、オフセットが0の場合、次のようになります。_absvel = 10 - > result = 0.1、および_absvel = 100 - > result = 0.01 オフセットが0.1の場合、_absvel = 10 - > result = 0.2 and _abslevel = 100 - > result = 0.11 オフセットを増やすほど、_absVelは最終結果に影響を与えません。 – Driblou

関連する問題