2017-09-01 8 views
1

ここにあなたが表示されます方法のいくつかは、何をすべきかの簡単な説明です:減速しばらく方向に移動

  • this.boundsは:代表Vector2d返します:船の境界(長方形)
  • this.bounds.getCenter()を返します。船の境界の中心。
  • getVelocity():ていない線形補間:角度(ラジアン)
  • Vector2d#interpolate(Vector2d target, double amount)が与えられたとき、正規化された、新しいVector2d:船の速度(毎フレームを位置決めするために添加)

  • new Vector2d(angle)を表しVector2d!あなたがinterpolateコードを表示したい場合は、ここでは(クラスVector2dに)ある:

    public Vector2d interpolate(Vector2d target, double amount) { 
        if (getDistanceSquared(target) < amount * amount) 
         return target; 
        return interpolate(getAngle(target), amount); 
    } 
    public Vector2d interpolate(double direction, double amount) { 
        return this.add(new Vector2d(direction).multiply(amount)); 
    } 
    

プレイヤーがキーを押していないとき、船はただ減速する必要があります。ここで私はそのために何をすべきかです:しかし、今私は、目標に向かって行っている間、それがドリフトしたい実現しました

public void drift() { 
    setVelocity(getVelocity().interpolate(Vector2d.ZERO, this.deceleration)); 
} 

。私はこれを試してみた:(Iは1の大きさを有する角度ベクトルに向かって補間してるので)当然の

public void drift(Vector2d target) { 
    double angle = this.bounds.getCenter().getAngle(target); 
    setVelocity(getVelocity().interpolate(new Vector2d(angle), this.deceleration)); 
} 

これは、これまで実際にゼロ速度に到達しません。また、ターゲットが非常に遅くなるとターゲットの方向に実際に「ドリフト」するだけです。

私はこれをどのように達成することができますか?私はそれを理解できません。これは大きな問題ですので、ありがとうございます。

これは私が作った大きなライブラリを使用しています。あなたが何か物事について何か質問があれば、私はそれをほとんどカバーしていると思います。

+2

私はあなたが何をしようとしているのか分かりません。減速させたいだけなら、速度ベクトルの長さを短くしてください。 [Rayleigh drag](https://en.wikipedia.org/wiki/Drag_(physics)#Drag_at_high_velocity)とすると、ドラッグの力は速度で2次的に大きくなります。 [Stokes drag](https://en.wikipedia.org/wiki/Drag_(physics)#Very_low_Reynolds_numbers:_Stokes.27_drag)の場合、線形に拡大します。一定の船積質量と一定の更新時間枠を仮定すると、あなたは次のようなことを行います: 'dragForce = constant * v.length()(^ 2); v = v *(1 - dragForce/v.length()) '。 –

+2

Btw、あなたの質問に不可欠な場合は、外部コンテンツにリンクしないでください。私が見る限り、あなたの補間関数はゼロベクトルを入力すればゼロベクトルを返します(その長さは 'amount * amount'よりも小さいので)。 –

+0

@NicoSchertler申し訳ありませんが、私は何を試しても、ここで書式設定されていなかったので、pastebinに投稿しなければなりませんでした。補間は機能します(私は何度も使用します)。今は、キーが押されていなければ、船は完全に停止するまで減速し、最後の方向に移動します。私はこの船を同じようにするが、ある方向にしたい。前に、私はちょうど0に向かって速度を補間することができます。しかし、私は方向を変えることができる間にそれが減速したいならば、私は何をすべきかわかりません。まだ理解しにくい場合は、画像を投稿してください。 – MCMastery

答えて

1

あなたのinterpolate機能が変なことをします。シンプルな物理モデルを使用してみませんか?例えば:

ボディ位置(px, py)と速度(vx, vy)を有し、また、単位方向ベクトル(dx, dy)は、加速度に応じ

(小)時間後、間隔dtの速度変化が便利である

vx = vx + ax * dt 
vy = vy + ay * dt 

任意の外力(モータ)は、加速度及び速度を変化させる。

ax = forcex/mass //mass might be 1 
ay = forcey/mass 

ドライ摩擦f ORCEの大きさは、摩擦力の大きさは、速度に依存

ax = c * mass * (-dx) 
ay = c * mass * (-dy) 

液(異なる状況のために、多くの異なる式がある)、それは方向の速度に逆の速度に逆それは方向情報、速度にされ依存しない

ax = k * Vmagnitude * (-dx) 
ay = k * Vmagnitude * (-dy) 

したがって、時間間隔ごとに、すべての力を追加し、結果の加速度を見つけ、結果の速度を求め、位置を変更します。

関連する問題