2011-11-10 78 views
0

我有以下場景:如果我在paint()方法中有一個while塊(例如用於模擬簡單的動畫,例如旋轉多邊形,通過多次繪製和擦除圖形),當點擊applet中的鼠標時,是否有辦法打破while塊?在java applet中停止動畫,鼠標點擊

多邊形的動畫不需要回憶paint()方法。也可以這樣做,如果while塊看起來像這樣:

while (count<n) 
{ 
    //code that draws the polygon rotating 
    count++; 
} 

回答

1

是的,有一種情況下,你的while循環。

最簡單的方法是在類文件private boolean stopLoop=false中設置一個變量,並在while循環中檢查此屬性while (!stopLoop)

現在的MouseEvent剛纔設置的屬性stopLoop=true和你做(如果你需要幫助,你在這裏How to Write a Mouse Listener

另一種解決方案是使用由@camickr提到鞦韆定時器(見其他答案)。讓我們假設你在paint()方法之外有一個普通的Timer方法,那麼你不應該在那裏使用一個while循環,我會建議只畫一張靜態圖片,如果你想讓你的poligon旋轉,就畫下一個,但用另一個角度等

這個想法是,你把你的while循環切入Timer方法,所以paint()被調用了很多o f次。如果您想停止poligon的繞行,請使用布爾標誌或停止計時器。在第一種情況下,如果處理布爾變量和鼠標事件正確,則可以處理多個多邊形,並且每個多邊形都可以啓動和停止。

如果您還有其他問題,請添加更多的細節,或者向我們展示一些最小化的代碼。

+0

我明白你在說什麼,但是我需要點擊時動畫的對象,當你點擊其他地方時停止動畫。你看到這個解決方案嗎?非常感謝 – biggdman

+0

你在其他地方有什麼意思?你的意思是在你的油漆區域之外,例如。一個面板包圍着按鈕,其他面板等?如果你想打你的多邊形,你需要比較從鼠標事件到多邊形的座標。 請詳細描述佈局和問題。 –

+0

在其他地方,我指的是繪製多邊形的區域之外(當我想要開始動畫時,我正在做的是:將鼠標事件的座標與多邊形的座標進行比較;我的問題是我想要的當我在多邊形之外單擊時停止動畫)。我正在繪製的只有一個面板。 – biggdman

1

請勿使用while循環。

而是使用擺動計時器來安排動畫。然後,您可以根據需要簡單地啓動/停止計時器。

+0

如果通過鼠標單擊觸發動畫(例如,如果您單擊多邊形繪製的區域,則會開始生成動畫,並且當您再次單擊時會停止),可以通過單擊鼠標中斷擺動定時器。非常感謝 – biggdman

+0

如果你想知道SwingTimer如何工作,請看這裏:http://stackoverflow.com/questions/8088002/how-to-use-a-swing-timer-to-start-stop-animation:D –