코드에 단위가 표시되도록 유지
시간 단위를 하나 선택해 일관되게 사용하세요. 속도가 초당 픽셀이고 델타가 초 단위라면 위치는 속도 × 델타만큼 이동합니다. 수동 확인을 하려면 초당 80픽셀로 설정한 마커를 10초 동안 움직여 보세요. 렌더링 횟수와 관계없이 게임 월드에서 약 800픽셀을 이동해야 합니다.
1,000으로 나누지 않은 performance.now()의 밀리초를 초당 속도와 함께 사용하지 마세요. deltaSeconds, speedPixelsPerSecond처럼 변수 이름에 단위를 표시하면 이후 조정에서 작은 움직임이 실수로 1,000배 커지는 일을 막을 수 있습니다.
장애의 효과를 제한
간단한 액션 게임에서는 델타의 최댓값을 의도적으로 정하고, 부하가 심하면 시뮬레이션이 잠시 느려지는 것을 받아들이세요. 반복 가능한 단계가 필요한 물리 시뮬레이션에서는 시간을 누적해 고정 간격으로 진행하고, 따라잡기 업데이트 수를 제한해 복구 작업이 페이지를 독점하지 않도록 하세요. 두 방법의 장단점은 다르므로 게임의 조작감과 규칙에 맞춰 선택하세요.
업데이트 사이에 인위적인 지연을 넣어 테스트한 뒤 직선 이동과 경로 끝의 충돌을 비교하세요. 물체가 얇은 장애물을 통과한다면 더 작은 하위 단계나 스윕 충돌 검사가 필요할 수 있습니다. 렌더링 속도만 바꿔서는 규칙 수준의 문제가 해결되지 않습니다.
게임의 델타 시간 관련 질문
델타 시간이 물리학을 결정적으로 만드는가?
아니요. 업데이트 간격이 달라지면 적분 결과도 달라질 수 있습니다. 시뮬레이션을 고정 단계로 진행하면 재현성이 좋아지지만 입력 시점과 부동소수점 연산의 세부 사항도 여전히 영향을 줍니다.
어떤 시계가 경과 시간을 제공해야 합니까?
애니메이션 콜백 타임스탬프나 performance.now()를 사용하세요. MDN은 둘 다 고해상도 시간 소스라고 설명합니다. 시스템 시계 조정은 시뮬레이션 시간과 무관하므로 짧은 프레임 간격 계산에 달력 시간을 사용하지 마세요.
추가 읽을거리
오래된 정보를 발견하셨나요? 수정 사항 제보