[英]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.