그래서 화면 밖으로 이동할 수없는 스프라이트가 있습니다. 나는 그것이 있어야 화면에 다시 플레이어를두고 함수했다 (내가 바로의 중간에 플레이어의 원점을 설정을, 그 무엇 * 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