Как реализовать прокручиваемую масштабируемую карту в JavaFX/ScalaFX?

Я реализую карту как аксессуар для компьютерной игры; он должен показывать географию компьютерной игры с несколькими информативными накладками. Интересно, как лучше всего добиться этого в JavaFX или, точнее, в ScalaFX.

Прямо сейчас у меня есть очень наивная реализация:

  • У меня есть плитки для карты в разных уровнях масштабирования. Для каждого уровня масштабирования я размещаю ImageView в Group и преобразовываю эту группу, чтобы все уровни масштабирования использовали одни и те же координаты.
  • Для моих оверлеев используется отдельная группа с такими же координатами.
  • Я масштабирую с помощью колесика мыши и делаю видимым только один уровень масштабирования, в зависимости от текущего масштаба.
  • Я упаковываю все это в файл ScrollPane.

Это имеет несколько ограничений:

  • все плитки для всех уровней масштабирования загружаются при запуске. Это уродливо, но работает в моем конкретном случае использования.
  • использование ScrollPane работает только в том случае, если карта имеет ограниченные границы. Опять же, хорошо здесь, но не для карт в целом.
  • UX странный: ScrollPane прокручивается с помощью колесика мыши, в то время как большинство карт прокручиваются за счет перетаскивания; большинство карт масштабируются колесиком мыши или щипком для увеличения. Крайне важно, чтобы масштабирование сохраняло «привязки» (позиции мыши/касания) во время жеста. (Также было бы неплохо иметь готовую мобильную версию из коробки, но сейчас это только мечты...)
  • различные уровни детализации в наложении, в зависимости от текущего масштаба, возможны, но, вероятно, не очень эффективны или удобны.

Очевидно, это один из подходов, которые я пробовал. В этом вопросе упоминается библиотека от какого-то eppleton, но, похоже, она не поддерживается, а блог, в котором описывалась библиотека, больше не существует. Кроме того, кажется, что основное внимание уделяется предоставлению игрового движка с плиткой, имеющей значение для игры; плитка на карте — это просто изображение, и наложению не важно, где начинается или заканчивается одна плитка.

Чтобы закончить это конкретным вопросом: существуют ли какие-либо библиотеки или методы, которые я могу использовать для удовлетворения своих потребностей? Меня особенно интересует мой третий пункт списка (UX), но я думаю, что если есть подходящий подход, он будет охватывать пункты с 1 по 3.


person Silly Freak    schedule 13.07.2015    source источник
comment
Вот (упрощенный) пример панорамируемой карты. См. также правильное масштабирование JavaFX. В противном случае вопрос, вероятно, слишком широк для переполнения стека (хотя там есть некоторая полезная информация). Если вы разделите его на отдельные, очень конкретные вопросы с небольшим количеством примера кода, возможно, вам повезет больше, и вы получите более качественные ответы, которые больше соответствуют тому, чего вы пытаетесь достичь.   -  person jewelsea    schedule 14.07.2015
comment
Вместо того, чтобы рисовать изображения и слои в коде Java, вы можете использовать JavaFX WebView с картой OpenLayers и выполнять наслоение в OpenLayers (JavaScript). Это то, что я делаю в своем проекте mapjfx.   -  person P.J.Meisch    schedule 14.07.2015


Ответы (1)


ОБНОВЛЕНО: теперь на столе есть еще несколько вариантов:


Один из вариантов — не создавать, а использовать существующий проект с открытым исходным кодом, например openmapfx

person Eugene Ryzhikov    schedule 14.07.2015