Я делаю платформерную игру. Прыжки и движение работают, и теперь я хочу запрограммировать столкновения. У меня есть какая-то идея относительно того, как это будет работать:Расчет столкновений с учетом скорости
Я не был уверен, должен ли этот вопрос находиться здесь или в игровом сайте dev.
У меня есть два Vector2 в - Вело и импульс (Velo является скорость). Оба значения (0, 0). Импульс - это то, что добавляется к скорости каждого кадра.
Каждый кадр, я сначала получаю вход. Импульс увеличивается и/или увеличивается на основе нажатых клавиш (например:
if (Gdx.input.isKeyPressed(Keys.A)) { momentum.x -= speed; }
)Затем я умножаю импульс на 0,15. Это так, что оно замедляется.
После этого умножаю скорость на 0,8.
Затем я добавить импульс скорости, чтобы увеличить скорость, так как это то, что на самом деле перемещает игрока.
Затем я добавляю скорость в положение плеера.
Чтобы применить гравитацию, я добавляю вектор силы тяжести (0, -10) в положение плеера.
Поэтому мне нужно найти способ перемещения плеера, но не позволять ему перекрывать любую часть мира. Мир состоит из множества Rectangle
экземпляров. Тело игрока также является экземпляром Rectangle
. Было бы проще переписать столкновения с помощью Box2D? То, что я пробовал, проверяет, перекрывает ли игрок какие-либо прямоугольники при его перемещении, и если это произойдет, а не перемещение.
Но это, кажется, не учитывает все - иногда это работает, но в других случаях оно останавливается, прежде чем прикасаться к миру.
TL; Я хочу совершить столкновение моего игрока с миром, который хранится в виде сетки прямоугольников. Как мне это сделать, поскольку мой игрок также является прямоугольником. Было бы проще использовать Box2D?
Я бы перевел это на сайт разработки игр. Я бы также рекомендовал изучать некоторые физики. – duffymo
@duffymo Как перенести его на сайт игры dev? И, я уверен, я знаю достаточно физики для этого, бут, может быть, не –
Я бы сказал, что нет после прочтения вашего вопроса. – duffymo