2D-рендеринг - Сзади на фронт с различной высотой - PullRequest
1 голос
/ 26 июля 2010

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

Как это: http://www.youtube.com/watch?v=Ahfrxm6ETgA
Важные вещи начинаются в 2:35. Проигнорируйте ужасное повествование. : P

Я использую VB2008.

Итак, вот что у меня сейчас:

  • Моя графика состоит из растровых изображений, которые иметь ширину и длину, делимые на 32.
  • Объекты имеют те же размеры, что и назначенный им рисунок.
  • У объектов есть слои, причем нижние слои рисуются задом наперед, прежде чем перейти на следующий слой (например, все объекты в слое 0 визуализируются до того, как объекты в слое 1)
  • ВСЕ объекты, независимо от пейзажа / игрока / лица / объекта, хранятся вместе в списке MapObject.

Вот то, что у меня также есть, что я не уверен, чтобы сохранить

  • Объекты сортируются не по их начальному значению X / Y, а по их значению X / Y + Высота. Таким образом, объекты отображаются в зависимости от того, где они «касаются» игрового поля. Например, X / Y = вершина объекта дерева, X / Y = ствол дерева.
  • Люди (включая игрока) будут просто обычными объектами карты, которые будут отображаться и обновляться в огромном отсортированном списке каждый кадр.

Есть предложения? Прямо сейчас, возни с моим кодом, позволяет моему плееру (32x64 пикселя) стоять перед зданием, но его ноги перекрываются клочком травы, что не работает. Однако изменение алгоритма сортировки приводит к тому, что игрок исчезает в здании, но вы можете видеть его ноги.

Значит, что-то не так, ха-ха.

Кто-нибудь имеет опыт работы с 2D-рендерингом, который может мне помочь?

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

Спасибо! ~

РЕДАКТИРОВАТЬ: Я просто прочитал это здесь http://xnafantasy.wordpress.com/2008/07/22/rendering-dilemmas-z-ordering-grass-and-camera-clipping/

Из того, что он говорит, у него есть 4 разных слоя, а затем он рисует актера между слоями 3 и 4, причем слой 4 является объектами, которые всегда будут появляться поверх человека. Итак, похоже, что его игрок не объект карты, а актер, отрисованный отдельно от всего остального.

Хммм.

1 Ответ

1 голос
/ 30 июля 2010

Если честно, я бы использовал двумерный массив (для координат x, y), содержащий список, упорядоченный по высоте.

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

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

...