강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Han Jun님의 프로필 이미지
Han Jun

작성한 질문수

파이썬 나도코딩 FPS

해결된 질문

작성

·

325

0

안녕하세요, 나도코딩님의 영상을 보고 따라하던 중 이해가 안되는 부분이 있어 여쭤봅니다.

FPS에 대한 부분인데요. 제가 코딩한 코드는 길지만 대충 설명하자면 방향키로 캐릭터를 움직이는 코드입니다.

여기서 제가 여쭤보고 싶은거는요,

dt = clock.tick(60)

이 문장인데요. 여기서 clock.tick(60)를 clock.tick(10)이라던지 숫자를 많이 낮추면 화면에서 캐릭터가 뚝뚝 끊기듯 움직입니다. 물론 저도 게임을 해봐서 fps가 떨어지면 화면이 끊기듯 나오는 것을 압니다. 하지만 이 캐릭터는 fps가 떨어지면 지정된 장소들에서 지정된 장소들로 밖에 못 가더라고요. 무슨 뜻이냐면, fps가 높을때는 방향키 한 번에 +1 만큼 상하좌우를 끊기지 않고 잘 갔다면, fps가 낮을때는 방향키로 +3만큼 가야 움직입니다 그리고 또 +3만큼... 또 +3..

제가 설명을 잘했는지 모르겠네요 ㅠㅠ

답변 1

1

안녕하세요, 인프런 AI 인턴입니다. Han Jun님, 질문 주셔서 감사합니다.

FPS(Frames Per Second)는 초당 몇 번 화면이 갱신되는가를 나타내는 단위이며, 게임에서는 이를 통해 부드러운 애니메이션과 플레이어 입력에 대한 반응 속도를 결정합니다. clock.tick(60)의 경우, 게임 루프가 초당 최대 60번 실행되도록 제한을 두는 것입니다. 게임 루프 내에서 이 작업을 수행함으로써 프레임레이트를 일정하게 관리할 수 있습니다.

FPS를 낮게 설정하면 clock.tick(10)처럼 하면, 게임 루프가 초당 10번만 실행되기 때문에 캐릭터 움직임이 뚝뚝 끊기는 것을 경험할 수 있습니다. 이러한 현상은 화면 갱신 빈도가 낮아져 입력에 대한 반응이 느려지기 때문입니다. 또한, 캐릭터가 지정된 장소에서만 움직이는 것처럼 보이는 이유는 프레임마다 캐릭터의 이동 거리가 고정되어 있지 않고, 프레임 시간 간격에 따라 크게 달라지기 때문일 수 있습니다.

FPS가 낮거나 높을 때 캐릭터의 이동 속도를 일정하게 유지하고 싶다면, 캐릭터의 위치를 업데이트할 때 dt값을 사용하여 조정해야 합니다. dt는 지난 프레임 이후 경과한 시간을 미리초 단위로 나타내며, 캐릭터 이동 속도를 dt와 스케일을 맞춰 조정하면 FPS에 관계없이 비슷한 속도로 이동할 수 있습니다.

예를 들어, 캐릭터의 속도를 픽셀 단위로 정하고 싶다면 다음과 같은 코드를 사용할 수 있습니다:

speed = 5 # 캐릭터 이동 속도(픽셀)
dt = clock.tick(60)
distance = speed * (dt / 1000) # 실제 이동 거리

여기서 speed * (dt / 1000)는 캐릭터가 실제로 이동해야 할 픽셀 수를 계산하게 되며, 이를 이용하여 캐릭터의 위치를 업데이트하면 FPS가 달라져도 일정한 이동 속도를 유지할 수 있습니다.

FPS 관련 문제를 해결하는 것이 쉽지 않을 수 있지만 위의 내용이 도움이 되었기를 바랍니다. 더 궁금한 사항이 있으시면 추가로 질문해 주세요.

Han Jun님의 프로필 이미지
Han Jun
질문자

어렵네요 ㅠㅠ 자세하고 친절한 답변 진심으로 감사합니다!

Han Jun님의 프로필 이미지
Han Jun

작성한 질문수

질문하기