Алгоритм масштабирования игрового мира в зависимости от положения персонажа

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

Поэтому я ищу алгоритм для определения масштаба, в котором должен быть мир, чтобы персонажи были в поле зрения.

Ваше время ценится.

2 ответа

Решение

Предполагая, что ваш экран (или окно) имеет фиксированный размер, (Screen_Width, Screen_Height),

Теперь вы вычисляете расстояния X и Y между двумя игроками.

xdist = abs(Player2.x - Player1.x);
ydist = abs(Player2.y - Player1.y);

Вычислить масштабные коэффициенты x и y:

xscale = Screen_Width / xdist;
yscale = Screen_Height / ydist;

И принять меньшее значение.

scale = min(xscale, yscale);

Сейчас если scale >= 1Тогда игроки будут помещаться на экране. Вам не нужно делать никакого масштабирования. Вы можете просто найти середину и нарисовать.

Если scale < 1тогда вы должны масштабировать все свои координаты scale,

Без какой-либо информации о типе модулей, IDE или языке, который вы здесь используете, возможное решение:

function object calcScale(screen, player1, player2, midpoint):
   width = abs(player1.x-player2.x)
   height = abs(player1.y-player2.y)
   width = max(width,height)
   height = width
   x = min(player1.x, player2.x, midpoint.x-width/2)
   y = max(player1.y, player2.y, midpoint.y+height/2)
   s = (screen.width*screen.height) / (width*height)

   newscreen= {startx:x, starty:y, scale:s}

   return newscreen

Это предполагает квадратную область просмотра с игроками в центре все время.

Другие вопросы по тегам