2016-08-15 3 views
0

オブジェクトをある程度加速したり減速させたりするゲームを作っています。アクセラレーション式

  1. velX(電流×速度)、
  2. velY(現在のy速度)、
  3. desiredVelX(所望velX値)、
  4. desiredVelY(所望velY値:

    Iは5つの変数を有します)、

  5. accelTime(オブジェクトが加速する速さ)。

基本的には、必要なValX = 10、0、-10の場合、valXをdesiredValXに加速する式が必要です。そして、Yベースの変数のための同じ方程式。

私は本当にこれらのような問題の方程式を生成する方法を考えていないので、それについてのいくつかの洞察も高く評価されます。 velX += (desiredVelX - velX)/accelTime私の目的のためにうまく動作します:、私は式があること

public class Player { 

private double x; 
private double y; 
private double velX; 
private double velY; 
private double desiredVelX; 
private double desiredVelY; 
private double accelTime = 128/2; //Half second to accelerate fully 


public Player(double x, double y, Game g) 
{ 
    this.x = x; 
    this.y = y; 
} 

public void tick() 
{ 
    if(velX!=desiredVelX){ 
     *Equation* 
    } 

    if(velY!=desiredVelY){ 
     *Equation* 
    } 

    x+=velX; 
    y+=velY; 
} 

public void accel(boolean d, double speed){ 
    if(d){desiredVelX = speed;} 
    else{desiredVelY = speed;} 
} 
} 

答えて

0

ネヴァーマインドを実現しました:

は、ここに私の現在のコードです。

1

私はすでにこれに答えていますが、ちょっとした変更を提案しています。加速と呼ばれる変数を持ち、それをフレームごとに追加してみてください。あなたが最初のループで次に

acceleration = (desiredVelX - velX)/accelTime 

、加速開始時に

だから

velX = max(min(velX + acceleration, desiredVelX), 0) 

これはあなたに一定の加速度、あなたが最大に達した後、加速停止を行います。最小通話と最大通話は、あなたの限界を超えないようにします。その後、最大速度を上げることに決めた場合、最大速度ごとに新しい加速定数を計算する必要なく簡単に処理できます。


現実世界の力と重量

に基づく現実的な物理学、加速度、力と重量によって制限されます。車の場合、エンジンはF力を出しWの重さをとります。この車の加速はF/Wです。

速度に応じて、速度を変える必要のある物体があります。あるものは他のものよりも重くても大きくてもよいし、他のものよりも力があるものもあります。

force = 5 # Your force here 
acceleration = force/weight 

これを他の式に差し込めば、加速しているオブジェクトの重さに基づいて異なる加速度が得られます。

爆発、重力爆弾、浮動プラットフォーム、弾丸蹴りなどを実装しようとすると、スピードと加速力が実際の物理に及ぼすのを助けます。現実的な物理が必ずしも望ましいとは限りませんが、とにかくそれを示唆している。

+0

「max min」コンボは、「負のスピード」の場合と同じように動作しません。スワップが必要な場合は、「min max」(境界を入れ替えずに)です。 – charlie

関連する問題