2017-02-20 185 views
2

我正在使用展開的地圖來創建標記。當用戶將鼠標懸停在標記上時,會顯示標題。但其他標記會與標題重疊,因此它會隱藏標題中顯示的信息。要從此避免,我用PGraphics繪製標題爲:如何避免展開地圖中標記的標題重疊?

public void showTitle(PGraphics pg, float x, float y) 
{ 
    String name = getCity() + " " + getCountry() + " "; 
    String pop = "Pop: " + getPopulation() + " Million"; 
    /
    /buffer is defined already. 
    buffer.beginDraw(); 
    buffer.fill(255, 255, 255); 
    buffer.textSize(12); 
    buffer.rectMode(PConstants.CORNER); 
    buffer.rect(x, y-TRI_SIZE-39, Math.max(pg.textWidth(name), pg.textWidth(pop)) + 6, 39); 
    buffer.fill(0, 0, 0); 
    buffer.textAlign(PConstants.LEFT, PConstants.TOP); 
    buffer.text(name, x+3, y-TRI_SIZE-33); 
    buffer.text(pop, x+3, y - TRI_SIZE -18); 
    buffer.endDraw(); 


} 

然後通過方法

public void draw() { 
     map.draw(); 
     image(buffer, 0,0); 
     } 

它解決的問題,現在的標題不帶標記重疊繪製緩衝區。在屏幕上,但它不是在標記下面畫的,而是畫在屏幕上的任意位置,如圖所示 enter image description here我該如何避免它?請任何幫助。

+0

請提供[mcve]。您可以使用簡化的硬編碼示例而不是整個草圖。 –

回答

1

您需要在繪製緩衝區之前存儲緩衝區的位置。基本上,你需要改變這一行:

image(buffer, 0,0); 

爲了這樣的事情:

image(buffer, bufferX, bufferY); 

你必須計算bufferXbufferY取決於您希望緩衝區出現。一個非常愚蠢的實現可能是這樣的:

public void showTitle(PGraphics pg, float x, float y) 
{ 
    bufferX = x; 
    bufferY = y; 
    //rest of your code 

我不熟悉不夠與展開地圖確切地告訴你該怎麼做,但這些都是基本知識。請注意,展開貼圖可能會自行翻譯,因此您可能必須使用pushMatrix()popMatrix()函數。另外請注意,您可能需要從地圖空間投影到屏幕空間。展開地圖庫可能有如何做到這一點的文檔。

+0

我的確和你提到的幾乎一樣。我存儲了所選標記的屏幕位置,並將它們用在image()函數中,但它不能以這種方式工作。是否有任何其他解決方案可以爲當前組件提供「專注」? –

+0

@BatulMajid我不知道你的意思是提供專注。如果您有後續問題,請在新問題中發佈更新後的[mcve],我們將從此處繼續。 –