物体不会遵循抛射体的运动路径



嗨,我正试图找到一种使用抛射运动使物体移动的方法。出于某种原因,当我自己做这件事时,我得到了指数运动,而不是抛射。我看过其他的例子,但它们有点不同,因为我有它应该降落的坐标,需要找到它必须拍摄物体的速度和角度。

我的代码:

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是它应该降落的坐标。

那么,为什么它不在抛射体运动路径上运动,而是在指数路径上运动呢?

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

x=v0*t*cos(θ)

y=v0*t*sin(θ)-(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的位置,然后简单地画出来。

你也需要考虑碰撞,但我想你稍后会讨论这个问题。:)