Animación y fricción
En Física se conoce como fuerza de fricción a la que realiza una oposición al desplazamiento de una superficie sobre otra, o a aquélla opuesta al comienzo de un movimiento.
En canvas podemos simular la fricción haciendo que la velocidad de la pelota disminuya, con cada fotograma, en un tan porciento.
pelota.vx *= pelota.friccion;
donde pelota.friccion = 0.98
; Esto quiere decir que la velocidad de la pelota se queda en un 98% de su valor anterior. Prácticamente esto significa que la pelota no llegará a pararse nunca. ( Zenón y la piedra )
Para que esto no pase podemos añadir esta línea de código:
if(pelota.vx < .01){pelota.vx = 0;}
Alternativamente podemos parrar la animación:
if(pelota.vx < .01){ window.cancelAnimationFrame(el_Id);}
var canvas = document.querySelector("canvas");
var ctx = canvas.getContext("2d");
var cw = canvas.width = 300;
var ch = canvas.height = 300;
var rad = Math.PI / 180;
var r = 25;
function Pelota(r) {
this.r = r;
this.x = r;
this.y = r;
this.vx = 2;
this.vy = 3;
this.color = "#6ab150";
this.friccion = .98;
}
Pelota.prototype.dibujar = function(ctx) {
ctx.save();
ctx.fillStyle = this.color;
ctx.beginPath();
ctx.arc(this.x, this.y, this.r, 0, 2 * Math.PI);
ctx.fill();
ctx.restore();
}
Pelota.prototype.actualizar = function() {
this.x += this.vx;
this.y += this.vy;
}
var pelota = new Pelota(r);
function Animar() {
el_Id = window.requestAnimationFrame(Animar);
ctx.clearRect(0, 0, cw, ch);
//////////////////////////////
pelota.vx *= pelota.friccion;
pelota.vy *= pelota.friccion;
if(pelota.vx < .01){pelota.vx = 0;}
/////////////////////////////
pelota.actualizar();
pelota.dibujar(ctx);
//if(pelota.vx < .01){ window.cancelAnimationFrame(el_Id);}
}
el_Id = window.requestAnimationFrame(Animar);
Vealo en codepen.io
Artículos relacionados
- - requestAnimationFrame
- - Animación sencilla
- - Animación y velocidad
- - Animación de ida vuelta
- - Animar particulas
- - Copos de nieve
- - Conectar particulas
- - Dejar rastro
- - Fuente de particulas
- - Animación y aceleración
- - Lanzar la pelota
- - Animación y fricción
- - Animación y easing
- - Easing circular
- - Resortes en canvas
- - Viscosidad
Enlaces útiles
- Trabajando con objetos en JavaScript.
- Vea la chuleta de canvas.
- Más información acerca del soporte de canvas en los navegadores