2017-02-20 9 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); 

Вы должны вычислить bufferX и bufferY в зависимости от того, где вы хотите буфер, чтобы показать. Очень тупая реализация может быть что-то вроде этого:

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

Я не знаком достаточно с Раскладыванием карт, чтобы сказать вам точно, что делать, но это основа. Обратите внимание, что Unfolding Maps может выполнять свои собственные переводы, поэтому вам, возможно, придется использовать функции pushMatrix() и popMatrix(). Также обратите внимание, что вам может потребоваться проецировать из пространства карты в пространство экрана. У библиотеки Unfolding Maps, возможно, есть документация о том, как это сделать.

+0

Я сделал почти то же, что и вы упомянули. Я сохранил позиции экрана выбранного маркера и использовал функции изображения(), но это не сработало. Разве нет другого решения, которое обеспечивает «фокусировку» на текущем компоненте? –

+0

@BatulMajid Я не знаю, что вы подразумеваете, предоставляя фокус. Если у вас есть последующие вопросы, отправьте обновленный [mcve] в новый вопрос, и мы пойдем оттуда. –

Смежные вопросы