Как сделать рендеринг 2d side-scroller - PullRequest
0 голосов
/ 13 апреля 2010

Я не очень понимаю, как я должен рендерить боковой скроллер? Как узнать, что нужно сделать, когда мой персонаж двигается? Какое расположение я должен использовать для персонажей? Я надеюсь, что мой вопрос ясен

Ответы [ 3 ]

1 голос
/ 13 апреля 2010

Самый простой способ, который я нашел, - это использовать переменные characterX и characterY [целое число или число с плавающей запятой, что вы хотите]. Затем есть переменные cameraX и cameraY. Каждый объект в сцене рисуется на объекте X-cameraX, объект-камера-Y ...

CameraX / CameraY объединены по формуле, близкой к средней точке, поэтому в конечном итоге они достигнут playerx / playery [Cx = (Cx*99+Px)/100] ... да

При этом каждый объект перемещается в пространстве сцены и трансформируется только при рендере [избавляя вас от головной боли]

0 голосов
/ 17 апреля 2010

Если это ваш первый набросок написания бокового скроллера, я бы предложил использовать уже существующий игровой движок (например, Construct или Gamemaker или XNA или что-то еще, соответствующее вашему уровню опыта), поэтому вам не нужно беспокоиться о том, какой порядок рендеринга и как все это работает. Немного возиться с этим - возможно, исследуя некоторые из них - чтобы почувствовать, как они работают, а затем рискнуть и заняться своими делами, как только вы к этому привыкнете. Не то чтобы в крещении огнем было что-то не так, но, на мой взгляд, оно может быть довольно подавляющим.

0 голосов
/ 14 апреля 2010
  • Используйте матрицу для определения опорного кадра камеры.
  • Используйте разделение пространства, чтобы разделить ваш уровень на экраны / окна.

Думайте о своем спрайте игрока как о любом другом объекте, например о врагах и интерактивных объектах. Теперь вам нужна абстракция камеры. Вы можете определить камеру как матрицу 3x3 с помощью этого макета:

[rotX_X, rotY_X, 0]
[rotX_Y, rotY_Y, 0]
[transX, transY, 1]

Подматрица 2x2 в верхнем левом углу - это матрица вращения. transX и transY определяют часть перевода, то есть источник. Вы также получаете масштабирование бесплатно. Просто масштабируйте вращающуюся часть с помощью скаляра, и вы получите масштаб.

Для правильной работы с вращением ваши спрайты должны быть полигонами / примитивами, например, треугольниками или квадратами; Вы не можете просто применить матрицу к позициям спрайтов при рисовании. Если вам не нужно вращение, просто трансформация центральной точки будет работать нормально. Если вы хотите, чтобы камера следовала за игроком, используйте позицию игрока в качестве источника камеры. Это вектор трансляции [transX, transY] Так как же применить матрицу к позициям сущностей и вершинам модели? Вы делаете умножение вектора на матрицу. v '= vM ^ -1 , где v' - новый вектор, v - старый вектор, а M ^ -1 - обратная матрица. Камера должна быть обратным преобразованием, потому что она определяет локальную систему координат. Можно привести аналогию: если вы находитесь передо мной, и я поворачиваю налево от своей системы отсчета, я поворачиваю вас направо. Это относится ко всем аффинным и линейным преобразованиям, таким как масштабирование, вращение и перевод.

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

  • 2, если ваша камера прокручивает только влево и вправо.
  • 4, если ваша камера прокручивает влево, вправо, вверх и вниз.
  • 4, если камера прокручивается в любом направлении и дополнительно может вращаться.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...