Центрирующий спрайт или движущаяся камера? C ++ / OpenGL

Я самостоятельно изучаю C ++ и играю в 2D-мозаику.

Я читал это scrolling сообщение Вот, который основан на этом учебник плитки.

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

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

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

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

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

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

Это был бы хороший способ? Или он тоже должен переместить окно просмотра или камеру?

3

Решение

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]