#java #map #scroll
#java #словарь #прокрутка
Вопрос:
Как следует из названия, я создаю игру, в которой есть карта, карта, конечно, больше, чем может поместиться на экране в большинстве игр на RTS 🙂 Итак, есть предложения о том, как это сделать? Карта представляет собой большой JFrame с нарисованными на нем изображениями.
Ответ №1:
Я сильно сомневаюсь, что рисование ВСЕЙ карты в памяти и простой выбор части для отображения масштабируемы. Вместо этого вы хотите рисовать только то, что видит пользователь, в оконных координатах.
Ответ №2:
Я не знаю, насколько велика ваша карта, но вы могли бы добавить карту в JScrollPane. Скройте вертикальные / горизонтальные полосы прокрутки. Затем вы можете расположить карту, используя окно просмотра области прокрутки.
Комментарии:
1. Я пытался это сделать, но, похоже, вы не можете добавить окно в контейнер… Итак, да, это не сработало 🙂 Как бы мне сделать, чтобы превратить мою карту (в настоящее время JFrame) во что-то другое, что будет принимать JScrollPane?
2. Ну, ваша «карта» не должна быть JFrame. Ваш графический интерфейс не должен расширять JFrame. Вероятно, вашей «картой» должна быть JPanel, которую вы добавляете в панель содержимого JFrame. Теперь JPanel можно добавить на панель прокрутки.
3. Не было бы разумнее для компонента map расширить JComponent?
4. Хотя я не думаю, что это имеет какое-либо значение. Просто чтобы убедиться, я попробовал это, и результат тот же.
Ответ №3:
Теперь я изменил свою карту (бывший JFrame) на JPanel, добавив ее в JScrollPane, которая добавляется в ContentPane JFrame, смотрите код ниже:
public Main() //extends JFrame
{
setDefaultCloseOperation(this.EXIT_ON_CLOSE);
Board b = new Board(db); //extends JPanel
setSize(400, 200); //size of the JFrame, JPanels size is set in its own constructor
jsp = new JScrollPane(b); //adding the Board to the JScrollPane
getContentPane().add(jsp); //adding the JScrollPane to the contentPane
setVisible(true);
}
Теперь, что происходит, отображается доска со всеми ячейками в нужных местах, я могу взаимодействовать с картой как обычно, но нигде не видно прокрутки.
Указатели или решение?
<3
Комментарии:
1. Ну, я сошел с ума после того, как не смог понять, как это исправить с помощью JScrollPane, поэтому я сделал так, что всякий раз, когда я нажимаю любой из WASD, карта перемещается соответствующим образом, я просто вызываю каждую ячейку карты и обновляю их setBounds-метод. На самом деле работает очень хорошо. Тем не менее, я еще не пробовал это на больших картах.