No entiendo por qué se hunde en el suelo. Supongo que es porque falla debajo del piso, y luego la velocidad se vuelve negativa por un tiempo infinito. simplemente no se como solucionarlo
var gravity = 9.8 var velocity = 5; var circleOne; function setup() { createCanvas(400, 400); circleOne = new newCircle(200, 50, 50, "black"); } function draw() { background("white"); circleOne.display(); circleOne.bounce(); } class newCircle { constructor(x,y,radius,color) { this.x = x this.y = y this.radius = radius this.color = color this.velocity = 1; } display() { fill(this.color) ellipse(this.x,this.y,this.radius); } bounce() { if (this.y + this.radius > height) { this.velocity = -this.velocity * 0.5 } else if (this.y < 0) { this.velocity = -this.velocity * 0.5 } else { this.velocity += 1; } this.y += this.velocity } }Le has dicho a la pelota que cambie la velocidad cada vez que llega por debajo de cierto punto. Pero cambiar la velocidad no significa necesariamente que la pelota estará por encima del umbral en el siguiente cuadro. Entonces, si la pelota está por debajo del umbral durante dos fotogramas consecutivos, girará dos veces, haciendo que la velocidad sea exactamente la misma que hace dos fotogramas.
La pelota se hundirá porque la velocidad sigue cambiando cada cuadro una vez que es demasiado baja.
Debe establecer un booleano adicional en verdadero cuando cambie la velocidad, luego asegúrese de no volver a cambiarlo mientras este booleano sea verdadero. Puede volver a establecer el booleano en falso una vez que la bola haya superado lo suficiente el umbral.
Sin embargo, si su objetivo es hacer un motor de física algo más sofisticado, le recomiendo que lea este artículo . Me ha ayudado mucho en el pasado mientras trabajaba en mi propio motor de física.