用二次方程-JAVA跳跃

时间:2013-12-22 03:25:30

标签: java math slick2d quadratic

Motion.java

package util;
import org.newdawn.slick.Input;
public class Motion {

    static double origin,speed;
    static double playerX=100,playerY=520, calcY;
    static boolean jump=false;
    static int x=0;
    public static void setSpeed(double speed){
        Motion.speed=speed;
    }
    public static void startMotionDetect(Input input, int delta){
        input.isKeyDown(Input.KEY_SPACE);
        if(input.isKeyDown(Input.KEY_SPACE))// <<Needs to be worked with depending on where the platform is.
               jump=true;
        if(input.isKeyDown(Input.KEY_RIGHT)&&playerX+delta*speed<=400)
            playerX+=delta*speed;
        if(input.isKeyDown(Input.KEY_LEFT)&&playerX-delta*speed>=0)
            playerX-=delta*speed;
        if (jump)
            jump(delta);
    }
    private static void jump(int delta) {
        playerY=QuadCalc.getY(.00038261911, -.6764705882, 520, x);
        if(x<=1768)
            x+=24;
        else if(x>=1768){
            jump=false;
            x=0;
            playerY=520;
        }
    }
    public static double getPlayerX(){
        return playerX;
    }
    public static double getPlayerY(){
        return playerY;
    }
}

QuadCalc.java

package util;
    import java.math.*;
    public class QuadCalc {
    static double a, b, c, x, y;
    public static double getY(double a, double b, double c, double x){
        y=a*Math.pow(x, 2)+b*x+c;
        return y;
    }
}

我正在尝试根据我创建的二次方程式使我的角色跳跃 (.00038261911x ^ 2-.6764705882x + 520)。问题是我无法弄清楚如何在移动角色的过程中使用delta,就像我左右移动一样。我尝试创建一个单独的变量来保存四元公式的计算值,而不是播放器'= delta * speed;直到达到计算值。这不起作用,因为三角洲会过多地夸大价值。有没有人有任何想法将三角洲与跳跃方法结合起来?

PS:如果需要更多信息,请告诉我D:

1 个答案:

答案 0 :(得分:1)

二次公式意味着在给定一些加速度和起始速度的情况下从时间计算位置。在这种情况下甚至不需要计算增量,您只需要将时间插入公式中,您将拥有当前位置。

如果您以可变速率或其他类似任务加速,那么增量确实很重要。

然而,如果你真的想知道,要找到delta,你需要采用公式的导数,或者更好的是,离散导数。给定a * x ^ 2 + b * x + c的二次方程的导数是2a * x + b。这应该是你的delta。