2012-08-12 108 views
0

我正在Scala中使用處理(儘管我不認爲這與我的問題真的有關)。如何在循環中強制重繪?

我構建,運行,直到一個有效的路徑已經找到了一個循環內的searchtree。這可能需要幾秒鐘的時間,我想在構建樹時繪製樹的圖形表示,以便用戶可以看到正在發生的事情。

我試圖通過調用內環路redraw()來解決這一點,但不起作用。我想因爲redraw()不強制重繪,但只設置一個標誌,重繪應該完成。

那麼,有沒有一種方法,我可以強制重繪或通常將如何解決這樣的問題?

+0

你在畫什麼/你在哪裏?搖擺? – Albert 2012-08-12 19:57:24

+0

不,我只是覆蓋PApplet的'draw()'方法 – 2012-08-12 20:43:30

+2

我猜你的searchtree發生在draw()中,並且有些循環可能會阻止剩下的動畫線程運行。如何在單獨的線程中運行搜索樹? – 2012-08-12 21:18:57

回答

2

@George Profenza的評論是正確的。處理任務都發生在動畫線程上。在draw()中執行的任何任務都會鎖定該線程,直至完成。如果要在任務執行時更新屏幕,請在單獨的線程上運行任務(超出Processing API的範圍,必須使用Java)或將任務分解爲多個段並讓繪圖()方法返回到每個段的末尾,以便PApplet可以呈現到屏幕上。

+0

那麼循環實際上是在覆蓋'keyTyped'方法中運行的。當然,我知道爲什麼「正常」的抽籤沒有被調用。這就是爲什麼我問是否有辦法強制重繪,因爲這將是最簡單和最乾淨的解決方案。但我想這不能用Processing來完成。所以我想在單獨的線程中運行循環將是最好的解決方案。將代碼拆分成多個在'draw'方法中處理的較小的循環實際上是我現在使用的解決方案,但我認爲它不是一個非常優雅的解決方案。 – 2012-08-13 02:35:28

+1

這不是特別優雅,但這是在單線程程序中運行異步更新的「正常」方式。與Flash相同,例如http://www.bit-101.com/blog/?p=2581。但是由於Processing是Java,所以你可以創建一個獨立的線程來構建你的searchtree。 – ericsoco 2012-08-13 18:42:42

+1

btw,keyTyped方法從PApplet.handleDraw()中調用,它基本上是主循環,也就是Processing的draw(),也就是Animation Thread的run()方法。所以你的searchtree或多或少地構造* is *在draw()中發生。 http://code.google.com/p/processing/source/browse/trunk/processing/core/src/processing/core/PApplet.java – ericsoco 2012-08-13 18:47:40