Итак, у меня есть спрайт, который не может перемещаться за пределы экрана. Я сделал функцию, которая ставит игрок обратно на экран, где он должен быть (я установить происхождение игрока прямо в середине, это то, что * 0,5 обозначает):Сделайте плавное скольжение анимации SFML
if (playerSprite.getPosition().y + playerSprite.getGlobalBounds().height*0.5 > VideoMode::getDesktopMode().height)
playerSprite.setPosition(Vector2f(playerSprite.getPosition().x, VideoMode::getDesktopMode().height - playerSprite.getGlobalBounds().height*0.5));
if (playerSprite.getPosition().x + playerSprite.getGlobalBounds().width*0.5 > VideoMode::getDesktopMode().width)
playerSprite.setPosition(VideoMode::getDesktopMode().width - playerSprite.getGlobalBounds().width*0.5, playerSprite.getPosition().y);
if (playerSprite.getPosition().y - playerSprite.getGlobalBounds().height*0.5 < 0)
playerSprite.setPosition(Vector2f(playerSprite.getPosition().x, playerSprite.getGlobalBounds().height*0.5));
if (playerSprite.getPosition().x - playerSprite.getGlobalBounds().width*0.5 < 0)
playerSprite.setPosition(Vector2f(playerSprite.getGlobalBounds().width*0.5, playerSprite.getPosition().y));
С этой пайсой кода, мой плеер не просто останавливается, когда он попадает на край экрана (если это не перпендикулярно, конечно), но вместо этого он плавно скользит по краю экрана. Но когда я попытался сделать то же самое для другого Sprite, скажем, прямоугольного Sprite, игрок просто остановится, независимо от угла столкновения. Может ли кто-нибудь объяснить мне такое поведение и, возможно, посоветует мне, как сделать его скольжением по его краям? Это было бы то, что я уже пробовал (здесь только до переезда, это аналог для левой стороны, вправо, вниз):
if (Keyboard::isKeyPressed(Keyboard::W)
sprite.movePlayer('W', speed);
if(playerSprite.getGlobalBounds().intersects(entity.getGlobalBounds()))
sprite.movePlayer('S', speed);
Всегда ли это останавливает ваше движение независимо от того, на какую сторону вы попали? Основываясь на вашем втором фрагменте кода, я ожидал бы, что некоторые стороны будут «скользить», а некоторые - «придерживаться». Проблема (или * a * проблема) заключается в том, что порядок вашей обработки имеет значение. Например, скажем, вы двигаетесь вверх-направо в левую часть объекта. Если вы проверите вертикальное перемещение перед горизонтальным, вы увидите, что есть столкновение и обратное вертикальное движение * до * проверки горизонтального движения, которое заставит вас придерживаться. Вам нужно выяснить способ отделить проверку столкновений от полученной коррекции. – 0x5453
Да, это останавливает мое движение, не имеет значения, с какой стороны я попал. И я вижу вашу точку зрения, но я не уверен, что это решит мою проблему. – Peter