2017-01-12 3 views
0

Итак, у меня есть спрайт, который не может перемещаться за пределы экрана. Я сделал функцию, которая ставит игрок обратно на экран, где он должен быть (я установить происхождение игрока прямо в середине, это то, что * 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); 
+1

Всегда ли это останавливает ваше движение независимо от того, на какую сторону вы попали? Основываясь на вашем втором фрагменте кода, я ожидал бы, что некоторые стороны будут «скользить», а некоторые - «придерживаться». Проблема (или * a * проблема) заключается в том, что порядок вашей обработки имеет значение. Например, скажем, вы двигаетесь вверх-направо в левую часть объекта. Если вы проверите вертикальное перемещение перед горизонтальным, вы увидите, что есть столкновение и обратное вертикальное движение * до * проверки горизонтального движения, которое заставит вас придерживаться. Вам нужно выяснить способ отделить проверку столкновений от полученной коррекции. – 0x5453

+0

Да, это останавливает мое движение, не имеет значения, с какой стороны я попал. И я вижу вашу точку зрения, но я не уверен, что это решит мою проблему. – Peter

ответ

-1

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

Смежные вопросы