物体不会遵循射弹运动路径

时间:2013-08-12 13:46:17

标签: java game-physics projectile

您好我正试图找出一种使用射弹运动使物体移动的方法。因为某些原因我自己工作时,我得到了一个指数运动,而不是抛射物。我已经看过其他的例子,但它们有点不同,因为我有它应该着陆的位置的坐标,需要找到它必须射击物体的速度和角度。

我的代码:

public void updateDir(){

    distY = (int)( projectedY - y);
    distX = (int)(projectedX - x);
    spdY = (double)(2*distY)/(time*time);
    spdX =  (double)(distX)/time;
    dir = Math.atan(spdY/spdX);


    System.out.println("spdY: " + spdY);
    System.out.println("spdX: " + spdX);
    System.out.println("dir: " + Math.toDegrees(dir));
}


public void move() {
    x +=   (spd*Math.cos(dir));
    y -=  (spd * Math.sin(dir));
}

projectedY和projectedX是它应该落在的坐标上。

所以,为什么它没有在射弹运动路径中移动,而是走向指数路径?

1 个答案:

答案 0 :(得分:0)

这些是用于计算以速度v0开始的物体坐标的(牛顿)方程,在角度θ处,在时间t之后受重力g的影响:

x = v0 * t * cos(theta)

y = v0 * t * sin(theta) - (gt ^ 2)/ 2

这些公式可以扩展为包括x0和y0,它们将是起始位置,并且t也可以更改为包括非0的起始时间,这样您就可以找到从第1秒到1.5的相对差异在路径中排名第二。这些已被省略。

每当你需要绘制对象时,你可以使用这些公式来计算位置,因为某人(一段代码)会记录时间(在游戏中非常重要)。

示例代码(不完整和伪代码):

class GUI {
    startProjectile() {
        model.startProjectile();
    }    

    paint() {
        Location l = model.getLocationOfProjectile();
        graphics.draw(projectile, l);
    }
}

class Model {
    startProjectile() {
        long projectileStartTime = System.currenttimemillis();
    }

    Location getLocationOfProjectile() {
        long timeInAir = System.currentTimemillis() - projectileStartTime;
        // Insert formulas for calculating the x and y coordinates based on the time, initial velocity and gravity
    }
}

从上面你应该注意到的最重要的一点是,你不需要直接计算x和y的速度,除非你当然需要它们用于其他东西。您可以根据世界的常数和时间直接计算x和y位置,然后在那里绘制。

你也需要考虑碰撞,但我想你以后会遇到这个问题。 :)