Java 如果我在处理中绘制地图';s设置方法并停止draw()的运行,不应';我的地图不能至少画一次吗?

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()方法运行,那么映射是否应该绘制一次,然后

我有一个老项目,涉及使用展开地图和处理绘制,嗯…地图哈哈。该项目运作良好,但我正在检查一些东西以帮助一位同事,遇到了一些我不太理解的东西

我的问题如下:如果我在Processing的
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(),我只是添加了它来测试我关于它在后台如何工作的假设,因为我不确定为什么地图至少没有绘制一次。我在测试这个问题上的错误是,从某种意义上说,我从一开始就确信,原因在于处理的逻辑,我没有想到它可能是展开的地图。我很感兴趣,所以稍后我将检查“展开地图”的代码,以便更好地理解它在绘制过程中的功能。非常感谢!!