[英]Falling object, stuck on using Timer
我正在嘗試以初始水平速度模擬掉落的物體。 我了解如何使其水平移動(無加速度),但是由於方程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();
}
}
先感謝您!
可以通過簡單地從每幀的Y速度中減去(假定正Y方向向上)常數(由於重力引起的加速度)來實現重力。
公式y = gt^2/2 + vt + y0
用於在指定時間后計算位置,但是您要針對每一幀進行模擬,因此需要一種增量方法:
velY = velY - gravity;
得出y = gt^2/2 + vt + y0
的近似值。 它的差異取決於時間步長。 產生差異的原因是,這不會模擬步驟之間的連續加速度。 (理論上,如果時間步長無限小,結果將是相同的)。
一種提高精度的方法(至少由一些物理引擎使用)是每幀計算此步驟的多個步驟(即在更新顯示之前進行物理的幾次迭代)。
對於科學上准確的模擬,如果沒有其他力作用於身體,則您在帖子中建議的方法是最准確的。
在actionPerformed
方法中,您可能應該在更新位置之前檢查該操作是否為計時器事件(這樣,如果發生另一個事件,它就不會更快地移動)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.