установка нелинейной границы в 2D игре - PullRequest
2 голосов
/ 07 марта 2012

Обычно, чтобы установить границу в определенной области, я бы реализовал что-то вроде:

if(player.X > 400){

   player.X = 400;

}

Это действует так, как будто есть вертикальная линия в X = 400, блокирующая движение за этим. Мне интересно, как бы я реализовал на границе для области, которая находится под наклоном или диагональю, а не вертикально / горизонтально.

Ответы [ 3 ]

3 голосов
/ 07 марта 2012

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

В любом случае я бы предложил использовать линейное уравнение и MathHelper.Clamp функцию

y = mX + b; // Line equation
x = (y - b) / m

Так что теперь вы можете получить границу x длязначение y вашего игрока

MathHelper.Clamp(Player.X, min, (Player.Y - b) / m) 

или граница x от значения y вашего игрока

MathHelper.Clamp(Player.Y, min, (m * Player.X) + b)
1 голос
/ 07 марта 2012

Я бы сказал, что это зависит от того, что именно вы хотите сделать, и типа вашей игры. Для динамических игр я предлагаю использовать физический движок по вашему выбору (2D или 3D) и добавить несколько статических фигур, которые определяют ваши границы.

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

1 голос
/ 07 марта 2012

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

...