2012-05-11 49 views
2

我想用Java做動畫製作。我看過:http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html「Java」動畫製作方法

我很驚訝的是,在定時器動作的處理程序:

  • 我們不實際繪製函數調用;我們剛剛更新狀態 - 因此它出現在定時器動作是用於「模擬」
  • 我們做了重畫請求
  • 擺在其方便

這似乎有點怪我,因爲重繪其請求:

  • 鞦韆可以整理多個重繪請求到一個
  • 如果我在定時器計數FPS,我可以超過計數(因爲多個重繪變成一個)

問題:我錯在閱讀示例代碼,或者這是在Java中執行動畫的「正確」方法嗎?

謝謝!

回答

5

分別進行狀態更新和渲染是相當正常的。

Java/Swing在這方面是非常正常的。

原因:

  • 許多事情可以更新狀態(計時器事件,用戶輸入等),以便進行更改非常輕便,分離它們從屏幕刷新,這樣你可以在任何做他們這是有用的時間
  • 您通常希望屏幕刷新以與模型狀態更新不同的速率運行。通常情況下,您需要固定的時間間隔進行動畫/狀態更新,但希望屏幕刷新的速度儘可能快。如果您在動畫中進行插值,則尤其如此。
  • 渲染通常需要在特定的上下文中進行(本例中爲Swing UI線程)。您並不需要限制狀態更改也僅在此情況下發生
  • 將數據模型中的視圖(屏幕顯示)分開是一種很好的做法。除了是一個很好的概念設計的區別,這可以讓你從顯示器獨立做事情喜歡測試的數據模型,在服務器上運行一個版本的模型沒有GUI等
2

在「動畫」的情況下, ,JavaFX比Java更好,因爲它主要是爲此目的而構建的

+1

取決於你正在嘗試做什麼 - JavaFX 2.0當然不錯,但Swing對於簡單動畫仍然很好。它具有不拉扯額外的依賴性的好處..... – mikera

+0

你的答案更有幫助。我很遺憾只能投票(而不是接受),因爲另一方在技術上更好地回答了原來的問題。 – user1383359

+0

@mikera:當然,我必須同意你:) –

0

您可能想嘗試Trident。它是一個乾淨而簡單的動畫庫,沒有很多花裏胡哨的東西,如果你想在Swing中做動畫,那麼你的生活就會更容易。