Java 2D игровая камера без прокрутки мира

#java

#java

Вопрос:

Я только что закончил месячный проект по созданию очень сложного редактора карт / миров для игры типа 2D tile rpg. Теперь я нахожусь на том этапе, когда мне действительно хотелось бы поиграть в игру, и нахожусь в процессе создания реализации игры во время выполнения, используя карты, персонажей и другие вещи, которые были созданы с помощью редактора карт. Я почти точно знаю, что я делаю, помимо камеры. Я не могу придумать способ заставить камеру работать аналогично играм вроде zelda (gameboy) (где камера фиксируется на персонаже) без прокрутки значений (x, y) каждого спрайта и плитки в моей игре при каждом движении игрока. Я изучил некоторые игровые движки, но я не уверен, что это то, что мне нужно, хотя я очень готов ошибаться в этом предположении. Вся игра сделана с изображениями, в ней нет отображаемых фигур, что наводит меня на мысль, что мне не нужно возиться с OpenGL, чтобы заставить камеру работать так, как требуется. Кто-нибудь может предложить способ реализации камеры без использования OpenGL? Я не против использования OpenGL, но я бы предпочел не изучать его, если мне это не нужно, поскольку у меня и так уже много времени с другими проектами. Спасибо за предложения.

Ответ №1:

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

Например, если ваш персонаж находится на плитках 100 (x) и 50 (y), а камера представляет собой сетку из плиток размером 7 на 7, все, что вам нужно будет нарисовать, — это то, что случайно оказалось на 48 плитках, окружающих игрока. Почти во всех плиточных играх прокрутка выполняется именно так, и это не очень сильно нагружает память. Вы должны быть в состоянии сделать это с минимальной задержкой и без излишнего программирования… в зависимости от того, как вы настроили свои плитки и их расположение слоями.

Комментарии:

1. Это в значительной степени тот подход, который я искал, но я не совсем понимаю, как его кодировать. Кто-нибудь может привести несколько примеров или рассказать немного больше о том, как это можно было бы сделать?

2. Вам нужен только простой цикл — ‘ int tiles [][];//что бы у вас там ни было, int PlayerX = 100; int playerY = 50; for(int x=(PlayerX-3);x<=(PlayerX 3);x ) { for(int y=(playerY-3);x<=(playerY 3);x ) { //нарисуйте и прочитайте плитку в правильном месте здесь } } ‘

Ответ №2:

Одно из простых решений — создать объект изображения, нарисовать его, а затем нарисовать на экране с правильным смещением

Комментарии:

1. Но тогда вам нужно подумать о том, было бы эффективнее отрисовывать объекты дважды, чем все перемещать