【问题标题】:Falling object, stuck on using Timer坠落的物体,卡在使用定时器
【发布时间】:2013-04-21 13:27:36
【问题描述】:

我正在尝试以初始水平速度模拟一个坠落的物体。我知道如何让它水平移动(无加速度),但由于方程 y = gt^2/2 + vt + y0,我很难让它垂直移动。由于二次方程,我遇到了问题。

我试图做的是做一个时间变量,每次由 SwingTimer 执行操作时,该变量都会增加一。所以我实际上会有一个时间变量。但我认为这不是最好的方法吗?

有人能把我推向正确的方向吗?

您可以在下面找到我已经编写的代码:

    public class Simulation extends JPanel implements ActionListener
    {
    Timer timer = new Timer(5,this);;
    private int Xpos=0, Ypos=0, velX, velY;
    private int Px,Py;

    JButton dropknop;
    private boolean drop = false;

    public Simulation()
    {
        this.setBackground(Color.white);
        velX = 2;
        velY = 2;

        dropknop = new JButton("DROP");
        dropknop.addActionListener(this);
        this.add(dropknop);
    }
    public int getXpos() {
        return Xpos;
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawRect(Xpos, 0, 20, 20);

        if(drop)
        {
            g.fillRect(Px, Py, 5, 5);
        }
    }

    public void actionPerformed(ActionEvent ae) 
    {
        if(ae.getSource() == dropknop)
        {
            Px = getXpos();
            this.drop = true;
        }
        if(Xpos<0 || Xpos>986)
        {
            velX = -velX;
        }
        if(Ypos<0 || Ypos>708)
        {
            velY = - velY;
        }

        if(drop)
        {
            Px += velY;
            Py += velX;
        }

        Ypos += velY;
        Xpos += velX;
        repaint();
    }
}

提前谢谢你!

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 检查了一个相关的模拟here

标签: java swing physics


【解决方案1】:

重力可以通过简单地从每一帧的 Y 速度中减去(假设正 Y 方向向上)一个常数(重力加速度)来实现。

公式y = gt^2/2 + vt + y0是计算指定时间后的位置,但你是每帧都模拟,所以需要增量法:

velY = velY - gravity;

这会产生 y = gt^2/2 + vt + y0 的近似值。它的发散程度取决于时间步长。产生差异的原因是这并不能模拟步之间的连续加速度。 (理论上,如果时间步长无限小,结果是一样的)。

使其更准确的一种方法(至少被某些物理引擎使用)是计算每帧的多个步骤(即在更新显示之前对物理进行几次迭代)。

对于科学准确的模拟,如果没有其他力作用在身体上,您在帖子中建议的方法是最准确的。


在您的 actionPerformed 方法中,您可能应该在更新位置之前检查该操作是否是计时器事件(这样如果发生另一个事件,它就不会移动得更快)。

【讨论】:

  • 我还需要能够绘制下落物体的图形。我认为 velY = velY - 重力对于图表来说太简单了?还是有办法从中取出图表?谢谢
  • “图表”是什么意思? (我已经更新了答案,但它可能仍然不是你想要的)。 速度的简单线性调整确实会产生位置的指数变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
相关资源
最近更新 更多