Я делаю игру, похожую на Legend of Zelda: Link to the Past (2D-приключение сверху вниз). Я хочу, чтобы персонаж оставался в центре на экране, когда он двигается.
В настоящее время, когда игрок хочет двигаться, я перемещаю всю карту в противоположном направлении. Это работает, но когда я добавляю больше объектов в мир, их перемещение становится все сложнее.
Есть ли лучший способ приблизиться к этому?
Ответы:
Типичный способ справиться с этим - создать объект камеры. Самая простая форма камеры - это просто позиция. Эта простая камера определяет «центр» текущего вида. Таким образом, вы не изменяете все позиции ваших плиток / объектов, вы просто вычитаете координаты камеры из позиций при рисовании. В этой ситуации камера не «двигается».
В то время как камера и ваш персонаж будут делить положение большую часть времени, вы все равно можете иметь их в качестве отдельных значений, так что вы можете, например, остановить движение камеры, когда она достигнет конца света, но разрешить игрок, чтобы продолжить движение.
Немного более продвинутая камера движется. Все объекты и плитки нарисованы без смещения, и позиция, с которой вы рендерится, изменится. Это очень похоже на самую простую камеру, и вы все равно можете выполнить многие из тех же оптимизаций для выборочного рендеринга (обращаясь только
draw
к тому, что камера может видеть), для обоих. По сути, это просто другой способ думать об этом.источник
cam variables
... и предложил альтернативный метод ... stackoverflow.com/questions/18199373/…Нет, это неправильный путь.
Как вы собираетесь делать обнаружение ловушек? Как насчет того, когда игрок достигает края стен? Будет ли ваша система просмотра работать с подземельями или вам придется переписывать значительную часть кода?
Мир это геометрия. Игрок это геометрия. Мир не двигается. Плеер делает. Установите положение камеры в центре проигрывателя. Всегда . И это все, что нужно сделать.
Не пытайтесь увлечься «о, если я скользю по миру, тогда это создаст впечатление, что игрок движется». Вы просто собираетесь усложнить математику странными системами координат в конце дня.
Это правда, что рендеринг OpenGL на самом деле работает, «фиксируя камеру так, чтобы она указывала вниз - z, и преобразовывая и поворачивая всю геометрию мира, чтобы она соответствовала объему канонического вида», но вы не должны думать об этом таким образом при программировании ,
gluLookAt
имеет параметры, названныеeye
,look
иup
по причине - так что вы можете думать с точки зрения разумной системы координат.источник