弹跳球停止弹跳?

时间:2013-05-28 07:49:07

标签: game-physics processing.js

我找不到怎么问,所以在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;
        }
    }

2 个答案:

答案 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);

你会看到更强的重力效应。