2013-03-27 1 views
3

Я сам изучаю C++ и просматриваю 2D-карту.Центрирующий спрайт или движущаяся камера? C++/Opengl

Я читал через этот пост scrollinghere, который основан на этом tiling tutorial.

Используя приведенный выше учебник и помощь от Pearson, Computer Graphics with OpenGL книги я написал небольшую программу, которая рисует 40x40 плиточный мир и Sprite (также плитку).

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

Я реализовал функцию Keyhandling(), которая позволяет перемещать map внутри viewport с использованием keyboards arrow keys. У меня есть переменная offsetx, offsety, что при нажатии клавиши увеличивается или уменьшается. В зависимости от того, присваиваю ли я переменную map или sprite, я могу больше или больше в любом направлении на экране.

Ничего не работает очень хорошо, поэтому я назначил переменные для обоих (карта и спрайт), но с положительными значениями для спрайта и отрицательными для карты. Таким образом, при нажатии клавиши это позволяет моему Sprite двигаться в одном направлении, пока карта движется в противоположном направлении.

Моя проблема заключается в том, что спрайт скоро движется достаточно, чтобы покинуть окно, и этого недостаточно, чтобы принести большую часть карты в сцену. (В окне отображается только 1/8th из плитки).

Я думал весь день, и я думаю, что эффективным/эффективным способом решения этой проблемы было бы исправить sprite в центре экрана и при нажатии клавиши map перемещается ... I Не уверен, как это реализовать.

Будет ли это хорошим способом? Или ожидается, что он переместит окно просмотра или камеру?

ответ

1

Вы не хотите перемещать все относительно Спрайта всякий раз, когда ваш персонаж перемещается. Рассмотрим более сложный мир, где у вас также есть другие вещи на карте, например, другие спрайты. Проще всего фиксировать карту и перемещать каждый спрайт относительно карты (если это подвижный спрайт). Просто не имеет смысла перемещать все в мире всякий раз, когда ваш персонаж перемещается по миру.

Если вы хотите визуализировать свой мир своим персонажем всегда в центре, это прекрасно. Лучше всего переместить камеру. Это также позволяет вам увеличивать или уменьшать размер камеры, вращать камеру и т. Д. С очень небольшим количеством хлопот, отслеживая все объекты в мире.

Будьте осторожны с использованием слова "viewport". Это означает очень специфическую вещь в OpenGL. (т. е. посмотрите на функцию glViewport). Если ваша книга использует ее по-другому, это нормально. Я просто указываю на это, потому что это не на 100% ясно, что вы подразумеваете под этим.