2017-05-13 4 views
0

Ich erstelle eine Physik-Engine, die derzeit Mausbeschleunigung (über die Zeit) verwendet, um Boxen über den Bildschirm zu bewegen. Ich strebe an, dass diese Mausbeschleunigung, die auf die Kästen angewendet wird, mit der Zeit um einen Faktor von 0,8 abnimmt, jedoch führt meine aktuelle Gleichung nicht dazu, dass die Mausbeschleunigung gegen Null konvergiert.JS Physik Beschleunigung Decay

Box Beschleunigung/Geschwindigkeitsabfall Gleichungen:

_this.vx ist, was ich will Zerfall haben um 0,8, aber es Verbindungen (in Bild).

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; 

Mausbeschleunigung Capture:

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

Was ist 't' bei' _this.update'? – guest271314

+0

Ich entschuldige mich, es ist eine Variable, die Zeit von einer Uhrfunktion enthält, sie wird im Update verwendet, um die Zeit in Sekunden zu messen. Wie px/s –

+0

't' würde nur erhöhen, ja? – guest271314

Antwort

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

sollte

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

Auch ich gehe davon aus, dass _this.ax *0.8 ist ein Tippfehler für _this.vx *0.8

Außerdem sollten Sie nach einem Mindestwert von _this.vx suchen, um die Aktualisierung zu stoppen, da die Multiplikation eines Bruches mit einer Zahl niemals null ergibt. Es sollte auf einen minimalen Wert geprüft werden, der für die Zwecke der Anwendung gleich Null ist.

+0

Es scheint jedoch so zu sein, dass dies einen Konflikt mit der Position der Boxen (_this.x) verursachen würde, da die Position Werte aus der Mischung der Geschwindigkeit erhält. –

+0

Das ist in Ordnung, da Sie versuchen, es um einen Faktor von, 8 'pro Sekunde zu reduzieren, sollte die Box letztendlich kommen und zur Ruhe kommen. – 11thdimension

+0

Letztendlich sollte für den X-Wert der Box folgendes erscheinen: '_this.vx = (_this.vx * 0,8) * t; _this.x + = _this.vx * 0.8 * t; ' –