Отбрасывание закадровых плиток в изометрическом двигателе - PullRequest
3 голосов
/ 14 января 2010

Для университетского семестрового проекта я работаю над графическим языком (мне известно о противоречии в терминах: P), в котором используется изометрический дисплей. То, что я пытаюсь выяснить, так это то, что рисование всех плиток тупо дорого и не нужно, поэтому я хочу выяснить относительно быстрый алгоритм определения того, какие листы следует рисовать, чтобы они поместились в окне NxMpx, учитывая, что лист графика XxYpx.

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

1 Ответ

3 голосов
/ 14 января 2010

Вам нужно подумать о двух понятиях: экранное пространство и мировое пространство. Это очень важно для трехмерных движков, но они применимы ко всем, кроме самых простых игр. В изометрическом движке ваше мировое пространство представляет собой двумерный массив плиток.

Итак, вы ищете прежде всего способ скрытия между этими двумя координатными пространствами. После того, как вы это сделаете, станет очевидно, что пространство экрана отображается в виде прямоугольника, повернутого на 45 градусов. Вы можете определить формулу для этого, но это важно, только если вы пытаетесь определить, какая часть мирового пространства видима, поэтому вы симулируете только монстров в этой области (эффективность необходима на 8-битных консолях, вероятно, не на современном ПК! ). Когда дело доходит до реального рендеринга, вам на самом деле не нужно определять эту видимую область мира, потому что это неявно в способе рендеринга плиток на экране: -

  1. Вы определяете, какое расположение плитки находится в верхнем левом углу экрана, назовите это O (для начала координат) - это будет фиксированное смещение от вашей точки интереса, обычно игрока, которого вы хотите сохранить центр экрана.
  2. После того, как вы раскрасите плитки в верхнем ряду экрана, шагая + 1X и -1Y в мировом пространстве для каждой плитки (если вы смотрите на северо-восток).
  3. Тогда вы рисуете строку ниже. Это смещение минус половина ширины тайла в пространстве экрана и начинается с O -1X в мировом пространстве.
  4. Вы повторяете шаги 2 и 3, изменяя свою начальную позицию в мировом пространстве на -1 в X и Y по сравнению с тем, что вы использовали на предыдущем этапе 2, пока не достигнете верхней части экрана.

Другие советы: -

  • Очевидно, вы не рисуете плитки, которые находятся за пределами карты. Вы также можете, в зависимости от игрового дизайна, не рисовать плитки вне определенной комнаты, в которой находится игрок.
  • Не только плитки для пола можно рисовать, но и игроки, монстры, сценарии и т. Д. Правило состоит в том, что вы рисуете все в определенном месте на одном и том же проходе. Таким образом, объекты, расположенные ближе всего к «камере», будут скрывать объекты позади них (именно поэтому вы начинаете рисовать в верхней части экрана).
  • Кроме того, в большинстве двигателей iso у вас есть не только напольная плитка, но и сегменты мебели и стен. Вы можете обозначить участки карты как принадлежащие определенной комнате, когда фокус находится на этой комнате (например, потому что в ней находится игрок), вы не рисуете сегменты стены на стороне комнаты, ближайшей к камере. .

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

...