簡體   English   中英

用Java制作動畫的最佳方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM