Java 如果我在处理中绘制地图';s设置方法并停止draw()的运行,不应';我的地图不能至少画一次吗?
我有一个老项目,涉及使用展开地图和处理绘制,嗯…地图哈哈。该项目运作良好,但我正在检查一些东西以帮助一位同事,遇到了一些我不太理解的东西 我的问题如下:如果我在Processing的Java 如果我在处理中绘制地图';s设置方法并停止draw()的运行,不应';我的地图不能至少画一次吗?,java,intellij-idea,applet,processing,unfoldingmap,Java,Intellij Idea,Applet,Processing,Unfoldingmap,我有一个老项目,涉及使用展开地图和处理绘制,嗯…地图哈哈。该项目运作良好,但我正在检查一些东西以帮助一位同事,遇到了一些我不太理解的东西 我的问题如下:如果我在Processing的draw()方法中调用展开贴图的draw()方法(Map.draw()),一切都会正常工作,一切都会被不断地重新绘制,我可以与应用程序和其他东西正常交互。但是,如果我在Processing的setup()方法中执行map.draw(),然后避免Processing的draw()方法运行,那么映射是否应该绘制一次,然后
draw()
方法中调用展开贴图的draw()
方法(Map.draw()
),一切都会正常工作,一切都会被不断地重新绘制,我可以与应用程序和其他东西正常交互。但是,如果我在Processing的setup()
方法中执行map.draw()
,然后避免Processing的draw()
方法运行,那么映射是否应该绘制一次,然后关闭所有内容
相反,当我在setup()
中运行map.draw()
,然后强制所有内容停止时,它不会绘制任何内容,甚至不会绘制一次
此外,我还尝试过只运行一次Processing的draw()
方法,并在Processing的draw()
方法中调用map.draw()
一次,方法是在setup()
的末尾使用noLoop()
。我的项目真的很长,所以我将只发布一些代码来测试我的这个小问题
private static final boolean offline = false;
public static String mbTilesString = "/Users/roy/IdeaProjects/UnfoldingMaps/data/blankLight-1-3.mbtiles"
private UnfoldingMap map;
public void setup() {
size(900, 700, OPENGL);
if (offline) {
this.map = new UnfoldingMap(this, 200, 50, 650, 600, new MBTilesMapProvider(mbTilesString));
} else {
this.map = new UnfoldingMap(this, 200, 50, 650, 600, new Microsoft.RoadProvider());
}
MapUtils.createDefaultEventDispatcher(this, this.map);
noLoop(); // draw() gets called only once
}
public void draw() {
this.map.draw();
}
我希望地图画一次,然后一切都停止。
相反,我得到了以下结果:
你所说的一切都是有道理的,你的期望也是正确的。可以通过绘制矩形而不是贴图来确认行为 我的最佳猜测是展开贴图与
noLoop()
函数不兼容。我假设展开贴图有一些依赖于绘制循环的内部逻辑:异步加载贴图块、响应用户输入等
您可以通过在setup()
函数中执行以下操作来探索行为:
noLoop();
for(int i = 0; i < 100; i++){
draw();
}
noLoop();
对于(int i=0;i<100;i++){
draw();
}
这是一种黑客行为,旨在探索行为。我不建议你这样做。如果我这样做,我会看到地图部分加载:
这告诉我展开贴图在某种程度上依赖于多次调用draw()
来处理加载。这是有意义的,因为加载是异步的,并且随着时间的推移在后台发生。它可能与加载图像后需要绘制处理的主线程有关。如果您想确定,可以查看一系列展开的贴图,以了解其内部行为
如果您真的需要将noLoop()
用于展开贴图,您可以使用delay()
函数的hack。或者你也可以看看展开的地图;也许我们错过了一个有用的功能。或者您可以修改源以获得所需的行为。或者你可以用一张照片或者别的什么东西把一些东西放在一起
<>但大多数情况下,我认为你应该避免使用<代码> nOOOPLE()/代码>展开地图。< / P>哇,我真傻,不考虑这个问题。这真的很有帮助:)不,我不需要使用noLoop(),我只是添加了它来测试我关于它在后台如何工作的假设,因为我不确定为什么地图至少没有绘制一次。我在测试这个问题上的错误是,从某种意义上说,我从一开始就确信,原因在于处理的逻辑,我没有想到它可能是展开的地图。我很感兴趣,所以稍后我将检查“展开地图”的代码,以便更好地理解它在绘制过程中的功能。非常感谢!!