我已经编写了一个简单的代码来获得跳跃球的位置,但是我肯定错过了一些东西,因为我得到了:

这是获取x和y位置的代码:

public Vector2f[] draw() {
    float x = 0, y = height; // height - float value from class constructor;
    ArrayList<Vector2f> graphic = new ArrayList<Vector2f>();
    for(;;){
        Vector2f a = new Vector2f(x, y);
        graphic.add(a);
        ySpeed -= 10;
        y += ySpeed*Math.cos(angle);
        x += xSpeed*Math.sin(angle);
        if(y <= 0){
            // float coef = -10 * y / ySpeed;
            // ySpeed = ((ySpeed + coef) * (-1) ) * bouncyness;
            ySpeed = (ySpeed * (-1)) * bouncyness;
            System.out.println(ySpeed + " " + y);
            y = 0;
        }
        if(x > Main.width)
            break;
    }
    Vector2f[] graphicArray = new Vector2f[graphic.size()];
    for (int i = 0; i < graphic.size(); i++) {
        graphicArray[i] = graphic.get(i);
    }
    return graphicArray;
}

最佳答案

在其迭代中,y在第一次运行时低于X轴。然后被清零
因此,在该迭代中获得的max height低于原始height
以后也一样
直到y设置为0而不将其设置为零(我认为它将始终收敛于该值)。
如果将height设置为除以10,它应该看起来不错。

对于弹跳情况,将if ( y <= 0)更改为if ( y<= 10 )并删除y = 0语句。
正确的情况(不弹跳),设置y = Math.abs(y)

10-05 22:47