2012-04-15 152 views
1

嗨我有一個問題,解決我需要解決的問題,繼續我正在做的項目。我想從JPanel的角落到由用戶輸入的角度確定的面板邊框上的任意點的線條製作動畫。動畫從一個點繪製一條線到一個點

很多類似於此的帖子推薦使用增加行的x2,y2的swing定時器,但是我的問題是我不知道要繪製的行,因爲它是由函數決定的必須寫入考慮角度(斜率)。

說它恰巧是30度......我不能只增加x2和y2,因爲我不知道像素的上升和下降是如何使正確的斜線生成動畫....

是否有可以幫助這個也許在數學或任何任何功能....我也尋找到javafx.animation

我不是尋找一個解決方案不一定只是要指出了正確的我想 謝謝

編輯
從另一篇文章:
嗨我想做一個項目,其實質上顯示了一個池球遍歷檯球桌的路徑。我理解底層的三角函數,但我對Java中的動畫沒有經驗。

現在我有一個JPanel作爲池表起作用。球總是從某個點開始。

我知道如何使用paint()繪製線條,但我怎樣才能輕鬆地製作動畫。

我的直覺是通過使用與搖擺定時器引起與各通延遲一個循環,並繪製與每個循環過程的行的下一像素進行動畫處理的球的路徑(基本上動畫越來越線)。我的問題是如何引用這些像素值。例如,如果線條是水平或垂直的,你可以增加y2或x2的值,並重新繪製線條,但是如果線條的斜率能夠改變,我知道如何獲得線條的端點,但是每個線條的情況如何線上的有效像素座標。我可以「繪製」線對象,並以某種方式以某種方式引用其路徑中的每個像素。我已經看了一下PathIterator(),但我不相信我走在正確的軌道上(或者我更擔心我不在最簡單,更高層次的軌道上)。

有沒有更簡單的方法來做到這一點,或者我至少在正確的軌道上?我正在自己研究,但是我很擔心,因爲這是針對學校的軟件工程項目,動畫方面真的讓我們的團隊重新受到關注。

+2

我建議學習/複習一些基本的三角學。如果給出一條線的角度,則給出它的斜率。 – Jeffrey 2012-04-15 03:32:24

+1

不需要JavaFx。正如上面所建議的,閱讀一些非常基本的三角學。你可以在這裏找到一些有用的信息:[Trigonometry](http://en.wikibooks.org/wiki/Trigonometry)。 – 2012-04-15 03:50:38

+0

對不起,我的問題更多的是線的動畫...我需要能夠顯示線被繪製...有沒有一種方法來訪問每個像素值,所以我可以遍歷每一個或有更高的可以做到這一點,我可以顯示線正在繪製 – Yoshi 2012-04-15 20:37:23

回答

1

我的直覺是通過使用與搖擺定時器引起與各通延遲一個循環,並繪製與每個循環過程的行的下一像素進行動畫處理的球的路徑(基本上動畫越來越線)。

是的,這是正確的。

我的問題是我該如何引用這些像素值。

我不擔心像素值。相反,將問題分解爲其組成部分 -

  • 給你的類一個int常數來表示時間片長度。你不妨試驗一下。
  • 代碼爲球的物理,這將瞭解每個時間片的球的位置
  • 有獨立的代碼,在它的當前位置繪製球。
  • 計時器將更新時間,並調用您的物理代碼來更新球的位置。物理部分將設置描述這個位置的類字段(可能是ballX和ballY變量),然後調用repaint(),以便JPanel的paintComponent(...)方法可以使用ballX和ballY變量在正確的位置繪製球。
  • 對程序的邏輯與視圖部分使用單獨的類將是最好的,但在早期階段可能不是必需的。
+0

非常感謝您的幫助! – Yoshi 2012-04-17 03:55:54

+0

@Yoshi:不客氣! – 2012-04-17 10:44:45

3

一旦找出三角函數,請參閱Math類。 methods包括計算頂部頂點所需像素高度所需的通常的sin,cos,tan方法。但請注意,這些方法以弧度爲角度,所以在使用它們時,需要將它們從度數轉換爲弧度。 Math.PI將對此有所幫助。

+1

+1另請參閱此[示例](http://stackoverflow.com/a/9373195/230513),它顯示了一種繪製笛卡爾座標的方法。 – trashgod 2012-04-15 09:24:35

+0

因此,對於問題的動畫方面,我是正確的選擇一個小的水平增量,並找到這個小直角三角形的頂點使用trig並繪製斜邊,然後繼續延長斜邊使用此方法在一個帶有秋千的循環定時器延遲? – Yoshi 2012-04-17 03:36:17

相關問題