2017-02-20 1 views
2

Ich verwende Entfaltungskarten, um Markierungen zu erstellen. Wenn ein Benutzer über eine Markierung fährt, wird der Titel angezeigt. Die anderen Markierungen überlappen jedoch den Titel, so dass die im Titel dargestellte Information ausgeblendet wird. Um von diesem zu verhindern, i PGraphics verwendet, um den Titel zu zeichnen:Wie vermeidet man die Überlappung des Titel des Markers in Entfaltungskarten?

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(); 


} 

Und dann Puffer zeichnet auf dem Bildschirm durch Verfahren

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

Es das Problem behebt, ist jetzt der Titel nicht mit Markern überlappte aber es wird nicht direkt unterhalb des Markers gezeichnet, stattdessen werden einige davon zufällig auf dem Bildschirm gezeichnet, wie in Abbildung gezeigt enter image description here Wie kann ich es vermeiden? Irgendwelche Hilfe bitte.

+0

Bitte geben Sie eine [MCVE]. Sie können vereinfachte, fest codierte Beispiele anstelle der gesamten Skizze verwenden. –

Antwort

1

Sie müssen die Position des Puffers speichern, bevor Sie ihn zeichnen. Grundsätzlich müssen Sie diese Zeile ändern:

image(buffer, 0,0); 

Um so etwas wie dieses:

image(buffer, bufferX, bufferY); 

Sie werden bufferX berechnen haben und bufferY je nachdem, wo der Puffer wollen zeigen. Eine sehr dumme Implementierung könnte wie folgt sein:

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

ich mit Ausklappen Karten nicht vertraut genug bin, Ihnen genau zu sagen, was zu tun ist, aber das sind die Grundlagen. Beachten Sie, dass Unfolding Maps möglicherweise eigene Übersetzungen ausführt, sodass Sie möglicherweise die Funktionen pushMatrix() und popMatrix() verwenden müssen. Beachten Sie auch, dass Sie möglicherweise vom Kartenbereich zum Bildschirmbereich projizieren müssen. Die Unfolding Maps-Bibliothek enthält wahrscheinlich eine Dokumentation dazu.

+0

Ich habe fast das selbe getan wie du erwähnt hast. Ich habe die Bildschirmpositionen des ausgewählten Markers gespeichert und diese in der image() Funktion verwendet, aber es hat nicht so funktioniert. Gibt es keine andere Lösung, die die aktuelle Komponente "fokussiert"? –

+0

@BatulMajid Ich weiß nicht wirklich, was du meinst, indem ich den Fokus biete. Wenn Sie weitere Fragen haben, senden Sie bitte ein aktualisiertes [mcve] in einer neuen Frage, und wir werden von dort gehen. –

Verwandte Themen