我不明白为什么它会掉到地板上。我猜是因为它在地板下面出了点故障,然后速度变成了负值,持续了无限长的时间。我只是不知道该怎么解决它
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
}
}发布于 2021-11-09 20:18:27
您已经告诉球在每次到达某个点以下时翻转速度。但是翻转速度并不一定意味着球在下一帧将高于阈值。因此,如果球连续两帧低于阈值,它将翻转两次,使速度与两帧前完全相同。
球会下沉,因为速度一旦太低,每一帧都会翻转。
在翻转速度时,应将额外的布尔值设置为true,然后确保只要此布尔值为true,就不要再次翻转它。当球超过阈值时,可以将布尔值重新设置为false。
然而,如果你的目标是做一个更复杂的物理引擎,我强烈建议你阅读this article。过去在我自己的物理引擎上工作时,它帮了我很大的忙。
https://stackoverflow.com/questions/69901954
复制相似问题