Отбрасывание закадровых плиток в изометрическом двигателе
Для университетского семестрового проекта я работаю над графическим языком (мне известно о противоречии в терминах:P), в котором используется изометрический дисплей. То, что я пытаюсь выяснить, так это то, что рисование всех плиток тупо дорого и не нужно, поэтому я хочу выяснить относительно быстрый алгоритм определения того, какие плитки должны быть нарисованы, чтобы уместиться в окне NxMpx, учитывая, что плитка графика XxYpx.
Я не делаю плавную прокрутку для этого, так что это не проблема. Я также не беспокоюсь о том, чтобы быть идеальным - небольшая ненужная ничья в порядке, я просто не хочу рисовать огромное количество ненужных плиток, которые не будут отображаться в игре.
1 ответ
Вам нужно подумать о двух понятиях: экранное пространство и мировое пространство. Это очень важно для трехмерных движков, но они применимы ко всем, кроме самых простых игр. В изометрическом движке ваше мировое пространство представляет собой двумерный массив плиток.
Итак, вы ищете прежде всего способ скрыться между этими двумя координатными пространствами. После того, как вы это сделаете, станет очевидно, что пространство экрана отображается в виде прямоугольника, повернутого на 45 градусов. Вы можете определить формулу для этого, но это важно, только если вы пытаетесь определить, какая часть мирового пространства видима, поэтому вы симулируете только монстров в этой области (эффективность необходима на 8-битных консолях, вероятно, не на современном ПК!). Когда дело доходит до фактического рендеринга, вам на самом деле не нужно определять эту видимую область мира, потому что это подразумевается в способе рендеринга плиток на экране:-
- Вы выясняете, какое расположение плитки находится в верхнем левом углу экрана, назовите это O (для источника) - это будет фиксированное смещение от вашей точки интереса, обычно игрока, которого вы хотите сохранить в центре экран.
- Как только у вас есть это, вы рисуете плитки в верхнем ряду экрана, шагая +1X и -1Y в мировом пространстве для каждой плитки (если вы смотрите на северо-восток).
- Затем вы рисуете строку ниже. Это смещение минус половина ширины тайла в пространстве экрана и начинается с O -1X в мировом пространстве.
- Вы повторяете шаги 2 и 3, изменяя свою начальную позицию в мировом пространстве на -1 в X и Y по сравнению с тем, что вы использовали на предыдущем этапе 2, пока не достигнете верхней части экрана.
Другие советы:-
- Очевидно, вы не рисуете плитки, которые находятся за пределами карты. Вы также можете, в зависимости от игрового дизайна, не рисовать плитки вне определенной комнаты, в которой находится игрок.
- Нужно рисовать не только плитки для полов, есть также игроки, монстры, сценарии и т. Д. Правило заключается в том, что вы рисуете все в определенном месте мира за один проход. Таким образом, объекты, расположенные ближе всего к "камере", будут скрывать объекты позади них (именно поэтому вы начинаете рисовать в верхней части экрана).
- Кроме того, в большинстве двигателей iso у вас есть не только напольная плитка, но и сегменты мебели и стен. Вы можете обозначить области карты как принадлежащие определенной комнате, когда фокус находится на этой комнате (например, потому что в ней находится игрок), вы не рисуете сегменты стены на стороне комнаты, ближайшей к камере.,
Во всяком случае, этого достаточно, чтобы продолжить, надеюсь, что это полезно, и ваш проект идет хорошо.