Oneshot Gems
지금 플레이

게임 개발자용

움직임이 프레임 수가 아닌 시간에 따라 달라지도록 합니다.

델타 시간은 업데이트 사이의 경과 시간입니다. 속도에 경과된 초를 곱하면 브라우저가 45개 프레임을 그리든 144개 프레임을 그리든 객체가 1초 동안 비슷한 거리를 이동할 수 있습니다. 까다로운 부분은 경과 시간이 비정상적으로 커지면 어떻게 해야 할지 결정하는 것입니다. 탭이 일시 중단되었거나 비용이 많이 드는 작업으로 인해 메인 스레드가 차단된 경우 맹목적으로 전체 간격을 적용하면 수학적으로는 일관되지만 플레이하기 불편한 점프가 생성될 수 있습니다.

이 페이지의 내용

코드에 단위가 표시되도록 유지

시간 단위를 하나 선택해 일관되게 사용하세요. 속도가 초당 픽셀이고 델타가 초 단위라면 위치는 속도 × 델타만큼 이동합니다. 수동 확인을 하려면 초당 80픽셀로 설정한 마커를 10초 동안 움직여 보세요. 렌더링 횟수와 관계없이 게임 월드에서 약 800픽셀을 이동해야 합니다.

1,000으로 나누지 않은 performance.now()의 밀리초를 초당 속도와 함께 사용하지 마세요. deltaSeconds, speedPixelsPerSecond처럼 변수 이름에 단위를 표시하면 이후 조정에서 작은 움직임이 실수로 1,000배 커지는 일을 막을 수 있습니다.

장애의 효과를 제한

간단한 액션 게임에서는 델타의 최댓값을 의도적으로 정하고, 부하가 심하면 시뮬레이션이 잠시 느려지는 것을 받아들이세요. 반복 가능한 단계가 필요한 물리 시뮬레이션에서는 시간을 누적해 고정 간격으로 진행하고, 따라잡기 업데이트 수를 제한해 복구 작업이 페이지를 독점하지 않도록 하세요. 두 방법의 장단점은 다르므로 게임의 조작감과 규칙에 맞춰 선택하세요.

업데이트 사이에 인위적인 지연을 넣어 테스트한 뒤 직선 이동과 경로 끝의 충돌을 비교하세요. 물체가 얇은 장애물을 통과한다면 더 작은 하위 단계나 스윕 충돌 검사가 필요할 수 있습니다. 렌더링 속도만 바꿔서는 규칙 수준의 문제가 해결되지 않습니다.

⁨게임의 델타 시간⁩ 관련 질문

델타 시간이 물리학을 결정적으로 만드는가?

아니요. 업데이트 간격이 달라지면 적분 결과도 달라질 수 있습니다. 시뮬레이션을 고정 단계로 진행하면 재현성이 좋아지지만 입력 시점과 부동소수점 연산의 세부 사항도 여전히 영향을 줍니다.

어떤 시계가 경과 시간을 제공해야 합니까?

애니메이션 콜백 타임스탬프나 performance.now()를 사용하세요. MDN은 둘 다 고해상도 시간 소스라고 설명합니다. 시스템 시계 조정은 시뮬레이션 시간과 무관하므로 짧은 프레임 간격 계산에 달력 시간을 사용하지 마세요.

추가 읽을거리

오래된 정보를 발견하셨나요? 수정 사항 제보

계속 즐겨요.

언제든 즐길 수 있는 무료 브라우저 게임. 마음에 드는 게임을 찾아 다음 최애로 만들어 보세요.

궁금한 것을 더 찾아보세요