2017-01-12 8 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

문제는 모든 업데이트 프레임에 대한 당신의 하드 부정을 수행하는 것을 할 수있다 Sprite의 경계선 방향으로의 속도, 아직 경계선 안에있는 방향으로의 속도 적용. 스프라이트가 범위를 치면 경계를 향한 움직임뿐만 아니라 모든 동작을 동결합니다.

관련 문제