2012-08-12 107 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