Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- PongWorld
- Next.js
- 백준
- AWS
- AWS Access Key
- 문자열 대소문자 구별
- react native
- img upload
- 리액트
- js
- GIT
- 리액트 네이티브
- firebase 라이브러리
- react native 개발
- 리액트 네이티브 에러
- 에러
- babel.config.js
- s3 upload
- 문자열 대소문자
- react native CLI
- Access Key 생성
- fire base
- react native picker
- error
- react native font
- React
- aws bucket 정책
- 리엑트 네이티브 아이콘
- Project
- react native 세팅
Archives
- Today
- Total
밝을희 클태
requestAnimationFrame API 주사율 동기화 하기 본문
이전에도 requestAnimationFrame API를 사용하여 주사율을 동기화한 적이 있지만, 그 당시에는 시간을 측정해 렌더링 스케줄에 이벤트를 등록하지 않는 방식으로 진행했다. 이번에는 이전의 방식과 달리, 모든 이벤트를 렌더링 스케줄에 등록하되, 모든 주사율에서 속도를 일정하게 유지하고 싶었다.
이전 방식에서는 렌더링 스케줄에 이벤트를 등록하지 않다 보니, 높은 주사율을 가진 모니터에서도 60 FPS 애니메이션을 보게 되는 한계가 있었다. 이러한 문제를 해결하기 위해, 이번 구현에서는 각 프레임에서 걸린 시간을 기반으로 속도를 조정함으로써 다양한 주사율에서도 일관된 애니메이션 속도를 제공할 수 있도록 하였다.
주사율 동기화 구현
- drawCanvas 함수 내에서 timestamp를 받아와 각 프레임 간의 시간 차이를 계산하여 속도를 조절한다.
- timestamp를 이용해 현재 프레임의 시간과 이전 프레임의 시간을 비교하여 diffTime를 계산한다. 이 값을 통해 도라에몽의 속도를 FPS에 맞춰 조정한다.
let lastTime;
const drawCanvas = (timestamp) => {
// 처음 호출시 timestamp는 undefined가 나옴
if (timestamp) {
if (!lastTime) lastTime = timestamp;
const diffTime = timestamp - lastTime; // 현재 시간과 마지막 시간의 차이 계산
// 주사율이 60hz 보다 높으면 1 미만, 낮으면 1 초과
const speedFactor = diffTime / (1000 / 60); // 60 FPS 기준 속도 조정
posRef.current.x += dirRef.current.x * SPEED_LEVELS[levelRef.current] * speedFactor;
posRef.current.y += dirRef.current.y * SPEED_LEVELS[levelRef.current] * speedFactor;
lastTime = timestamp; // 현재 시간을 마지막 시간으로 업데이트
}
animationFrameId = requestAnimationFrame(drawCanvas);
};
https://find-doraemon.vercel.app/
'사이드 프로젝트 > 도라에몽 잡기 [React]' 카테고리의 다른 글
<Canvas> 캐릭터 그리기 도라에몽 (0) | 2024.11.06 |
---|---|
<Canvas> 총알 자국 그리기(사라지는 애니메이션, 회전해서 그리기) (0) | 2024.11.03 |
<Canvas> 애니메이션 중단 시 requestAnimationFrame()의 비동기 문제 해결 (0) | 2024.11.03 |
React에서 Canvas 태그로 구현한 애니메이션: Lerp와 벡터 활용 (5) | 2024.10.23 |