我有一个旧项目,涉及到使用“展开地图和处理”来绘制,嗯...地图哈哈。该项目运行良好,但我正在检查一些东西以帮助同事,但遇到了我不太了解的事情。
我的问题如下:如果我在Processing的draw()
方法中调用Unfolding Map的map.draw()
方法(draw()
),则一切正常,一切都被重绘,并且可以正常交互该应用程序等等。但是,如果我在Processing的map.draw()
方法中执行setup()
,然后又避免运行Processing的draw()
方法,那么是否不应该绘制一次地图然后关闭所有内容?
相反,当我在map.draw()
中运行setup()
并强制一切停止时,它什么也没有画,甚至没有一次。
我还尝试过一次运行Processing的draw()
方法,并通过在{{的末尾使用map.draw()
在Processing的draw()
方法中调用一次noLoop()
1}}。我的项目真的很长,所以我只发布一些代码,仅用于测试我的这个小问题。
setup()
我希望地图绘制一次,然后一切停止。 相反,我得到以下信息:
答案 0 :(得分:1)
您所说的一切都是有道理的,您的期望是正确的。您可以通过绘制矩形而不是地图来确认行为。
我的最佳猜测是“展开地图”与noLoop()
函数不兼容。我认为“展开地图”具有一些依赖于绘制循环的内部逻辑:异步加载地图图块,响应用户输入等。
您可以通过在setup()
函数中执行以下操作来探索行为:
noLoop();
for(int i = 0; i < 100; i++){
draw();
}
这是一种黑客行为,旨在研究该行为。我不建议这样做。如果这样做,我会看到地图已部分加载:
这告诉我,“展开地图”在某种程度上依赖于多次调用draw()
来处理加载。这是有道理的,因为加载是异步的,并且会随着时间的推移在后台发生。加载图像后,可能需要在Processing的主线程上进行绘图。如果您想确定的话,可以查看“展开地图”中的the source来了解其内部行为。
如果您确实需要在展开地图中使用noLoop()
,则可以使用带有delay()
函数的hack。或者,您可以查看the documentation中的“展开地图”;也许我们错过了一个有用的功能。或者,您可以修改源以获取所需的行为。也许您可以使用PGraphics或其他东西将它们放在一起。
但是,大多数情况下,我认为您应该避免在展开地图中使用noLoop()
。