Я реализую карту как аксессуар для компьютерной игры; он должен показывать географию компьютерной игры с несколькими информативными накладками. Интересно, как лучше всего добиться этого в JavaFX или, точнее, в ScalaFX.
Прямо сейчас у меня есть очень наивная реализация:
- У меня есть плитки для карты в разных уровнях масштабирования. Для каждого уровня масштабирования я размещаю
ImageView
вGroup
и преобразовываю эту группу, чтобы все уровни масштабирования использовали одни и те же координаты. - Для моих оверлеев используется отдельная группа с такими же координатами.
- Я масштабирую с помощью колесика мыши и делаю видимым только один уровень масштабирования, в зависимости от текущего масштаба.
- Я упаковываю все это в файл
ScrollPane
.
Это имеет несколько ограничений:
- все плитки для всех уровней масштабирования загружаются при запуске. Это уродливо, но работает в моем конкретном случае использования.
- использование ScrollPane работает только в том случае, если карта имеет ограниченные границы. Опять же, хорошо здесь, но не для карт в целом.
- UX странный: ScrollPane прокручивается с помощью колесика мыши, в то время как большинство карт прокручиваются за счет перетаскивания; большинство карт масштабируются колесиком мыши или щипком для увеличения. Крайне важно, чтобы масштабирование сохраняло «привязки» (позиции мыши/касания) во время жеста. (Также было бы неплохо иметь готовую мобильную версию из коробки, но сейчас это только мечты...)
- различные уровни детализации в наложении, в зависимости от текущего масштаба, возможны, но, вероятно, не очень эффективны или удобны.
Очевидно, это один из подходов, которые я пробовал. В этом вопросе упоминается библиотека от какого-то eppleton, но, похоже, она не поддерживается, а блог, в котором описывалась библиотека, больше не существует. Кроме того, кажется, что основное внимание уделяется предоставлению игрового движка с плиткой, имеющей значение для игры; плитка на карте — это просто изображение, и наложению не важно, где начинается или заканчивается одна плитка.
Чтобы закончить это конкретным вопросом: существуют ли какие-либо библиотеки или методы, которые я могу использовать для удовлетворения своих потребностей? Меня особенно интересует мой третий пункт списка (UX), но я думаю, что если есть подходящий подход, он будет охватывать пункты с 1 по 3.