Как перемещаться по карте с помощью мыши и / или клавиш (RTS-подобная игра)

#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-метод. На самом деле работает очень хорошо. Тем не менее, я еще не пробовал это на больших картах.