경과 시간을 누적하고 제한된 업데이트를 실행합니다.
각 애니메이션 콜백에서 경과 시간을 누산기에 추가합니다. 누산기에는 적어도 하나의 단계가 포함되어 있지만 1/60초와 같은 일정한 간격으로 물리학을 업데이트하고 해당 간격을 뺍니다. 그런 다음 최신 상태를 렌더링합니다. 프레임당 최대 따라잡기 단계 수를 설정합니다. 그렇지 않으면 긴 일시 중지로 인해 더 많은 시간이 소모되고 지연이 심화되는 대규모 백로그가 발생할 수 있습니다. 초과 시간을 삭제, 제한 또는 다른 복구 규칙으로 처리할지 여부를 명시적으로 결정합니다.
단위를 일관되게 유지하십시오. 속도가 초당 월드 단위로 측정되는 경우 각 시뮬레이션 업데이트 내의 고정 단계를 곱합니다. 동일한 속도에 프레임의 전체 경과 시간을 곱하지 말고 고정 업데이트도 여러 번 실행하십시오. 그렇지 않으면 움직임이 두 번 계산됩니다.
자체 경계에서 입력 및 렌더링을 처리합니다.
각 시뮬레이션 단계에서 유지 중인 입력을 읽거나 단계에서 해당 작업을 사용할 때까지 일회성 작업을 대기열에 넣습니다. 두 프레임 사이에 키 누름이 발생하면 다음 업데이트 전에 해당 키가 손실되지 않는지 확인하세요. 렌더링은 물리 상태 사이를 보간할 수 있는 반면 충돌 및 채점은 시뮬레이션 상태를 사용합니다. MDN은 requestAnimationFrame을 다시 그리기 전에 예약된 일회성 콜백으로 설명하고 타임스탬프를 사용하여 진행 상황을 계산하도록 조언합니다. 누산기는 해당 타임스탬프를 사용하여 업데이트를 고정 상태로 유지합니다.
루프의 한계 테스트
일반 프레임, 시뮬레이션된 느린 프레임, 긴 일시 정지에서 동일한 짧은 움직임과 충돌을 비교합니다. 플레이어가 얇은 벽을 뚫고 터널을 뚫거나, 실속 후 추가 속도를 얻거나, 밀린 업데이트를 따라잡는 동안 여러 번 충돌을 일으키지 않는지 확인하십시오. 의도한 규칙에 따라 일시 중지 및 숨겨진 탭 반환을 테스트하세요. 고정 단계 루프가 시뮬레이션을 안정적으로 만들어 주지만 여전히 고속에서 충돌이 누락되는 경우 렌더링 빈도를 높이는 대신 모션에 적합한 충돌 방법을 사용하십시오.
고정 시간 단계 게임 물리학 관련 질문
고정된 시간 간격이 결정론적 물리학을 보장합니까?
아니요. 시뮬레이션 간격을 일정하게 유지하지만 입력 타이밍, 수학 및 충돌 순서로 인해 여전히 변동이 발생할 수 있습니다. 재생이 필요한 테스트의 경우 별도로 제어합니다.
긴 프레임 정지 후 캡 따라잡기 업데이트가 필요한 이유는 무엇입니까?
제한이 없으면 따라잡는 것이 나중 프레임을 독점하여 지연을 악화시킬 수 있습니다. 시뮬레이션된 시간을 폐기할 수 있는지 여부를 포함하여 게임에 맞는 복구 정책을 선택하고 테스트하세요.
추가 읽을거리
오래된 정보를 발견하셨나요? 수정 사항 제보