У меня это работало неделю назад, но потом я сломал его. Я не могу заставить его снова работать. У меня есть 2D-спрайты, они просто прямоугольники. Ротации нет. Я не ищу способ обнаруживать столкновения между ними, он у меня есть, и об этом написаны тысячи статей. Я не могу найти никаких ресурсов о том, что делать при столкновении. Все, что я хочу, это чтобы спрайты не перекрывались. Никаких подпрыгиваний или чего-то подобного. Они просто останавливаются. В частности, прямо сейчас у меня есть только игрок и несколько плиток уровней, с которыми он сталкивается.
Звучит просто, но это не так. Это должно быть очень точным, иначе происходят странные вещи. Я пытался исправить это весь день со странными смешанными результатами. Иногда мой игрок застревает в полу и не может двигаться влево или вправо. Когда я это исправлю, он сможет проходить кварталы влево или вправо.
Итак, моя текущая установка выглядит так: попробуйте переместить игрока туда, куда он хочет. Затем спросите карту, не сталкивается ли его плитка с чем-нибудь. Если да, то на карте указано, сколько пикселей перекрывается в каждом из четырех направлений. Сложная часть теперь заключается в том, как игрок должен реагировать на эти числа. Когда он на земле, есть 1 пиксель перекрытия с полом, чтобы он знал, что он на земле (в противном случае он вибрирует между падением и приземлением на землю, потому что без перекрытия он думает, что под ним ничего нет). Это перекрытие в один пиксель означает, что левый и правый края также встроены в пол, и поэтому он не может двигаться.
Есть ли хороший способ разобраться во всем, используя одну ограничивающую рамку для игрока? Было бы лучше иметь отдельную ограничивающую рамку для каждой из его четырех сторон?