2017-05-13 6 views
0

現在、時間の経過とともにマウスアクセラレーションを使用して画面全体にボックスを移動する物理エンジンを作成しています。私はこのマウスの加速度を8倍に減衰するボックスに適用することを目指していますが、私の現在の方程式はマウスの加速度をゼロに収束させません。JS物理アクセラレーションディケイ

ボックス加速度/速度減衰方程式:

_this.vx私は0.8減衰を有することを望むものであり、まだそれは(画像中)化合物。

Log of velocity values

_this.update = function (t) { 


     _this.x += _this.vx * 0.8 * t; 
     _this.vx += (_this.ax *0.8) * t; 



     console.log("Velocity: " + _this.vx); 


    _this.y += _this.vy * t; 
    _this.vy += (_this.ay + 440) * t; 

マウスの加速キャプチャ:

var mouse = { 

    update: function (t) 
    { 
     mouse.ox = mouse.x; 
     mouse.oy = mouse.y; 

    }, 
    x: 0, 
    y: 0, 
    ox: 0, 
    oy: 0, 
    vx: 0, 
    vy: 0, 
    click: false 
} 

var now, after,timediff; 

window.onmousemove = function (e) 
{ 
    mouse.ox = mouse.x; 
    mouse.oy = mouse.y; 
    mouse.x = e.x; 
    mouse.y = e.y; 

    now = performance.now(); 
    timediff = now - after; 
    mouse.vx = ((mouse.x - mouse.ox)/timediff)*100; 
    mouse.vy = ((mouse.y - mouse.oy)/timediff)*100; 
    after = now; 

    timediff = 0; 
} 
+0

'_this.update'で' t'とは何ですか? – guest271314

+0

私は謝罪し、時計機能からの時間を含む変数であり、秒単位で時間を測定するために更新に使用されます。 px/s –

+0

't'のように増加するだけでしょうか? – guest271314

答えて

0
_this.vx += (_this.ax *0.8) * t; 

_this.vx = (_this.vx *0.8) * t;//Assignment not addition 

また、私は_this.ax *0.8がための誤植であると仮定していなければなりません3210

さらに、更新を停止するには、最小値を_this.vxにする必要があります。これは、数値に端数を掛けてもゼロにならないためです。アプリケーションの目的上、ゼロと同じ最小値をチェックする必要があります。

+0

しかし、これはボックスの位置(_this.x)と競合するようですが、positionは速度の合成から値を取得するためです。 –

+0

それはあなたがそれが最終的に来るべきである秒当たり0.8分の1の因数でそれを減らそうとしているので、大丈夫です。 – 11thdimension

+0

最終的に、ボックスのX値は、次のようになります。 '_this.vx =(_this.vx * 0.8)* t; _this.x + = _this.vx * 0.8 * t; ' –