[英]Best way to animate in Java?
我目前正在使用設計的動畫引擎,該引擎采用Drawable類型的對象並將其添加到列表中。 Drawable是具有一種方法的接口:
public void draw(Graphics2D g2d);
擴展動畫管理器遍歷此列表,並在每個對象上調用draw()方法,並傳遞從Swing組件獲取的Graphics2D對象。
這種方法起初似乎效果很好,但是正如我擔心的那樣,從長遠來看,它似乎無法處理多個對象。
僅注冊了兩個Drawable,並且兩個繪圖圖像都顯示在屏幕上,我看到30-60秒后有點閃爍。
有沒有一種方法可以優化這種方法? 當前,它調用AWT線程(invokeLater)處理所有任務。 並發繪圖並不是真正的選擇,因為這幾乎總是會在Swing / AWT中引起問題,這在很大程度上是由於圖形未同步。
如果只是單純的是動畫的好方法,什么是當你有多個對象都需要用自己特定的變量咳嗽 咳游戲渲染的東西更好的方法?
任何幫助,將不勝感激。 謝謝!
編輯:
我無法使用repaint(),因為我的引擎已經調用AWT線程來繪畫內容。 如果我從AWT線程調用invokeLater,則由於某種原因該圖像永遠不會被繪制。
我還應該補充一點,我使用的是刻度和fps系統。 60次滴答@ 120 fps。
每次滴答都會更新游戲邏輯,而每個幀渲染調用都在幀管理器上進行繪制。
這是一個壞主意嗎? 我應該只使用FPS而不是滴答嗎?
我認為覆蓋paintComponent(Graphics g)並定期在JPanel上或使用Timer繪制的任何對象上調用repaint方法會更合適。 您的問題可能是由於您嘗試繪制然后由Swing自己繪制而引起的。
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel() {
public void paintComponent(Graphics g) {
//draw here
}
};
panel.setPreferredSize(800, 600);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true)
new Timer(16, new ActionListener() {
public void actionPerformed(ActionEvent event) {
panel.repaint();
}
}).start();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.