2013-09-24 2 views
0

В настоящее время я разрабатываю 2D-RPG с LWJGL и до сих пор на стадии разработки. У меня есть много тех, которые я хочу создать, но одна из моих больших проблем - это установка камеры на плеер. Все решения, которые я видел, связаны с перемещением мира и сохранением игрока, который может работать, но кажется очевидным, что это может вызвать некоторые проблемы с расчетами, если их не контролировать. Обычно я бы написал систему, в которой мне не пришлось бы об этом беспокоиться, но я отказываюсь, потому что в конечном итоге я намерен добавить многопользовательские возможности, когда движущийся мир будет неиграбельным.2D Moving Camera (LWJGL)

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

ответ

0

Всякий раз, когда вы собираетесь проектировать 3d-окно просмотра на 2-й экран, вам нужно переместить все в соответствии с точкой зрения наблюдателя (так называемая камера или вид).

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

Вы должны переместить весь мир в соответствии с положением камеры только потому, что вам нужно преобразовать все в вашей сцене, как видно из этой точки зрения, иначе как вы могли бы проецировать ее на свой экран? Нет концепции «переместить камеру, сохранить мир по-прежнему».

+0

Две проблемы: одна, это 2-й проект, поэтому я не знаю, сколько из ваших трехмерных знаний применяется. Два, если мир движется, как на Земле работает мультиплеер, если каждый игрок перемещает мир вокруг них, а не двигается? – 2mac

0

Перемещение мира визуально, это как все остальные RPG. Однако не перемещайте местоположение реального мира.

Нарисуйте все, кроме ui, как правило, переведите все в соответствии с положением игроков (то есть glTranslate2f(-player.x,-player.y)). Все это делается в методе рендеринга. В сетевом многопользовательском режиме видовое окно выполняется для этого конкретного игрока (т. Е. Экран Боба переведен на основе позиции Боба, перевод Джейн основан на позиции Джейн). Если вы предпочитаете многопользовательский режим с одним экраном, вам, вероятно, придется использовать mutliple framebuffers (по одному на каждого игрока) и использовать их в качестве видовых экранов.

+1

Я добавил 'glTranslatef (-game.player.getX(), - game.player.getY(), 0);' к моему основному методу визуализации перед 'Display.update();', но я не получаю никаких результатов. Позиция игрока удерживается в этих методах. – 2mac

+0

glTranslatef следует вызывать перед тем, как отобразить плеер, а не после. Вы должны нажать матрицу преобразования, glTranslatef (...), нарисовать мир, врагов и персонажей, поместить матрицу преобразования, нарисовать пользовательский интерфейс, а затем вызвать Display.update() в этом точном порядке. – DeadlyFugu

Смежные вопросы