我找不到怎么问,所以在link有一个演示。我很确定这是一个简单的问题,但我似乎无法找到原因。
我的问题是:为什么球停止弹跳?它是关于乘法或除法等舍入的东西......
void move() {
PVector v0 = v;
PVector dv = PVector.mult(a, deltaT);
v.add(dv);
PVector d = PVector.add(
PVector.mult(v0, deltaT),
PVector.mult(dv, deltaT * 0.5));
move(d.x, d.y);
}
void move(float dx, float dy) {
p.x += dx;
p.y += dy;
if (p.x > width - r) {
p.x = width - r;
v.x = -v.x;
}
if (p.x < r) {
p.x = r;
v.x = -v.x;
}
if (p.y > height - r) {
p.y = height - r;
v.y = -v.y;
}
if (p.y < r) {
p.y = r;
v.y = -v.y;
}
}
答案 0 :(得分:2)
这部分代码存在问题:
if (p.y > height - r) {
p.y = height - r;
v.y = -v.y;
}
想象一下,身高是600,r是10.当球击中底部( py&gt;(600 - 10))时,它会重置为(600-10)。但是球可以击中底部:p.y可以高于高度,导致你遇到的问题。在这种情况下,正确的代码将是:
if (p.y > height - r) {
p.y = (p.y - height) + (height - r);
v.y = -v.y;
}
(p.y - 身高)每次球反弹时你会失去什么。
希望这有帮助。
答案 1 :(得分:0)
变量乘以&lt; Ball 对象的每个移动中为0。 它的PVector a; Ball对象最初获得重力值( PVector gravity = new PVector(0,0.0025); ) 在setup()
中ball.a = gravity;
然后在每个移动
中 PVector dv = PVector.mult(a, deltaT);
最终导致PVector dv值为零。
如果您更改
PVector gravity = new PVector(0, 0.0025);
到
PVector gravity = new PVector(0, 0.025);
你会看到更强的重力效应。