Digo "desaceleración" porque no estoy usando aceleración en este momento; Lo que quiero decir es mover la velocidad de regreso a cero, y finalmente detenerse.
Soy nuevo en vectores y no soy tan bueno con la física y demás. ¿Cómo se maneja normalmente la "desaceleración"?
Lo que tengo ahora funciona, pero parece un poco hackear .
update:function(Game, t, dt) {
var speed = Game.Input.isKeyDown('shift') ? 8 : 4;
if (Game.Input.isKeyDown('a')) {
this.velocity.i -= speed;
}
else if (Game.Input.isKeyDown('d')) {
this.velocity.i += speed;
}
else {
if (Math.abs(this.velocity.i) > 3) {
this.velocity.i += (this.velocity.i > 0) ? -speed : speed;
}
else {
this.velocity.i = 0;
}
}
if (Game.Input.isKeyDown('w')) {
this.velocity.j -= speed;
}
else if (Game.Input.isKeyDown('s')) {
this.velocity.j += speed;
}
else {
if (Math.abs(this.velocity.j) > 3) {
this.velocity.j += (this.velocity.j > 0) ? -speed : speed;
}
else {
this.velocity.j = 0;
}
}
this.updateVectors(dt);
}
Usé 3 porque cualquier cosa más baja exhibe un comportamiento extraño, supongo que si aumentara la velocidad, entonces necesitaría ser cambiado.
2d
mathematics
physics
Xavura
fuente
fuente
velocity.i += speed;
laspeed
es, de hecho, su aceleración, es decir, la tasa que la velocidad cambia por. :)Respuestas:
Algo tan simple como
funciona bien
fuente
En Pseudocódigo, hago variaciones de esto:
Velocidad + = ((MoveDirection * MaximumSpeed) - Speed) * AccelerationFactor
Dónde:
Que maneja tanto la aceleración como la desaceleración en una curva, en lugar de una línea. Si desea diferentes tasas de aceleración y desaceleración, puede hacer declaraciones IF que determinen si el jugador está intentando no moverse o moverse en la dirección opuesta.
fuente
Las respuestas aquí (
vel = vel * 0.9
) son realmente amortiguadoras , no lo que yo consideraría 'desaceleración' .A menudo hago la desaceleración de esta manera:
Algunos pros y contras frente a la amortiguación:
Pros :
Contras :
fuente
En pocas palabras, en pseudocódigo:
Sin embargo, deberá verificar si (velocidad actual <0.001f) o algo y establecerlo en 0.
fuente