Должен ли я переместить мир или переместить игрока?

11

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

Я разрабатываю это с AndEngine для Android, который использует OpenGL и Box2d.

Прежде чем начать, мне нужно определиться с чем-то важным: должен ли я использовать мир вокруг игрока, чтобы имитировать движение, или фактически двигать игрока и следовать за ним с помощью функций камеры игрового движка?

Оба подхода имеют разные сильные и слабые стороны, поэтому я не знаю, какой из них считается лучшим. Например, что могло бы облегчить добавление бонусов по пути и иметь хороший анимированный фон?

Спасибо!

monoceres
источник
2
Переместить камеру.
Джонатан Дикинсон
1
Если у вас нет особых причин для не желающих использовать камеру (которая уже была написана для вас), вы должны переместить плеер и камеру. Добавление «бонусы» не должны быть затронуты в любом случае.
Кристофер Horenstein

Ответы:

9

Перемещение камеры (прилагается к проигрывателю). Я предположил бы, что ваш мир имеет множество объектов, такие как враги. Если вы пошли с двигающимся миром, вам придется перебрать все эти объекты, чтобы обновить свои позиции каждый раз, когда мир двигался.

Если переместить игрок, и прикрепить камеру к игроку, то есть минимальное использование ресурсов. Игра будет добраться до его визуализации фазы, цикл через все один раз, как это делает каждый кадр, и сделать их в положении - camera.position. Положение камеры всегда будет равна вашей позиции игроков в этом случае.

мыльная пена
источник
Конечно , если объекты являются врагами, вы не должны проходными их, просто добавьте движение миров к их в своем методе обновления.
SirYakalot
1
+1. Используйте camera.setChaseEntity(player);для достижения этого.
MartinTeeVarga
6

Я всегда перемещаю камеру и рекомендую это - есть много причин, почему я предпочитаю это, но наиболее значительная, вероятно, сводится к этому:

  1. Если вы перемещаете камеру и плеер, это только две сущности, которые необходимо обновить, чтобы прокрутить экран.

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

Дэвид Гувея
источник
Я согласен, но я бы добавил, что простое добавление линии + = 'движение миров к классу противника было бы довольно тривиально.
SirYakalot
@AsherEinhorn Я полагаю, вы говорите о сценарии, таком как граф сцены, где каждый узел разделяет преобразования родителя, и простое перемещение корневого узла (то есть «мира») автоматически переведет все остальное? Потому что в любом другом случае перемещение мира подразумевает перемещение всего в мире, что и было целью моего поста.
Дэвид Гувея
хорошо, если мировое движение обратно пропорционально игроку. То есть - вы двигаетесь вперед, мир движется назад, тогда вы можете просто - = движение игроков ко всем игровым объектам. Я согласен с вами, я просто говорю, что есть тривиальные способы заставить обоих работать.
SirYakalot
4

Это довольно тривиально, на самом деле это не имеет никакого значения от того, что вы описали.

Либо вы перемещаете фон мимо камеры и плеера, либо перемещаете плеер и камеру вместе с ним. Я полагаю, что есть еще одна вещь, если вы просто перемещаете фон.

Хотя я полагаю, что если вы передвинете фон, вам нужно будет привязать к нему любые пикапы и врагов, что опять же тривиально, но об этом стоит подумать.

Лично я бы переместил игрока, потому что мне просто нравится, когда все делается более реалистично.

SirYakalot
источник
0

Другие ответы хороши, но я хотел бы добавить несколько моментов о том, что лучше, в надежде помочь тому, кто попытается принять такое же решение для другого проекта.

Перемещение игрока:

  • Все просто, все остальное статично (ish), поэтому, если говорить упрощенно, единственное, что вам нужно сделать, чтобы переместить игрока, - это player.x += 5;(псевдокод).
  • Это "клики лучше" для большинства людей. Когда вы играете в игру, вы всегда думаете, что игрок движется, а не наоборот. Так что проще думать об этом как "игрок должен двигаться, а не мир", что, в свою очередь, может помочь кому-то организовать это в своих головах.
  • Легко отследить, где находится игрок (его позиция и его координаты на карте)

Перемещение мира:

  • Если ваша игра достаточно велика, вам не нужно беспокоиться о переполнении / переполнении, слишком далеко от центра мира, поскольку положение игрока всегда очень близко 0.
  • Как и выше, если вы возитесь с трехмерными вычислениями, вам не нужно беспокоиться о неточных результатах с плавающими точками, потому что все, что вы видите на экране, должно быть достаточно близко 0.
  • Если все сделано правильно, вы можете создать «бесконечный» мир.
  • Необходимо отслеживать игрока вручную, позиция игрока всегда будет небольшим значением, которое указывает, где игрок находится на экране (вроде), чтобы знать, находится ли игрок в верхнем левом углу карты или в нижнем правом углу, вам придется отслеживать это каким-то образом.

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

TomTsagk
источник