有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对象不会跟随投射物的运动路径

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

我的代码:

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

  1. # 1 楼答案

    以下是计算物体坐标的(牛顿)方程,从速度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的位置,然后简单地画出来

    你也需要解释碰撞的原因,但我想你稍后会谈到这个问题。:)