簡體   English   中英

如果我在 Processing 的 setup 方法中繪制地圖並完全停止 draw() 運行,我的地圖不應該至少繪制一次嗎?

[英]If I draw a map in Processing's setup method and stop draw() from running at all, shouldn't my map be drawn at least once?

我有一個舊項目,涉及使用展開地圖和處理來繪制,嗯......地圖哈哈。 該項目運行良好,但我正在檢查一些東西以幫助同事並遇到一些我不太明白的東西。

我的問題如下:如果我在 Processing 的draw()方法中調用map.draw() Map 的draw()方法( map.draw() ),一切正常,一切都會連續重繪,我可以正確地與應用程序等交互。 但是,如果我在 Processing 的setup()方法中執行map.draw()然后避免 Processing 的draw()方法運行,那么地圖不應該被繪制一次然后一切都被關閉嗎?

相反,當我在setup()運行map.draw()然后強制一切停止時,它不會繪制任何東西,甚至一次也不繪制。

另外,我已經試過運行處理的draw()方法只有一次,並呼吁map.draw()在處理的只有一次draw()方法,通過使用noLoop()在結束setup() 我的項目真的很長,所以我只發布一些代碼只是為了測試我的這個小問題。

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() Maps 與noLoop()函數不兼容。 我認為 Unfolding Maps 有一些依賴於繪制循環的內部邏輯:異步加載地圖圖塊,響應用戶輸入等。

您可以通過在setup()函數中執行以下操作來探索行為:

noLoop();

for(int i = 0; i < 100; i++){
  draw();
}

這是一個旨在探索行為的黑客 我不建議這是一個修復。 如果我這樣做,我會看到地圖被部分加載:

部分加載的地圖

這告訴我展開地圖以某種方式依賴於多次調用draw()來處理加載。 這是有道理的,因為加載是異步的,並且隨着時間的推移在后台發生。 這可能與加載圖像后需要在 Processing 的主線程上繪制有關。 如果您想確定,您可以查看 Unfolding Maps 的來源以了解其內部行為。

如果您真的需要將noLoop()noLoop() Maps 一起使用,您可能會使用delay()函數。 或者您可以查看展開地圖的文檔 也許我們錯過了一個有用的功能。 或者您可以修改源以獲得您想要的行為。 或者,也許您可​​以使用 PGraphics 或其他東西將一些東西放在一起。

但大多數情況下,我認為您應該避免將noLoop()noLoop() Maps 一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM