Oneshot Gems
지금 플레이

게임 개발자용

리스너마다 하나의 소유자와 명확한 수명 주기를 지정합니다.

다시 시작한 후 한 번의 클릭이 두 번 실행되면 장면이 열릴 때마다 리스너가 등록되고 제거되지 않을 수 있습니다. 눈에 띄는 중복 작업 증상은 광범위한 메모리 누수 조사와 다릅니다. 등록을 계산하고 이를 장면 수명 주기에 연결하는 것부터 시작합니다. 모든 리스너에는 명확한 소유자, 해당 소유자에 대해 한 번 실행되는 설정 지점, 장면이 입력 수신을 중지할 때 해제 경로가 있어야 합니다.

이 페이지의 내용

의도적인 수명주기 경계에 등록

렌더링 함수나 모든 프레임에서 창 키다운 핸들러를 연결하지 마세요. 시작 또는 마운트 기능에 장면별 설정을 넣고 정리 없이 기능이 두 번 실행될 수 없도록 합니다. removeEventListener를 사용할 때 콜백에 대한 참조를 유지하십시오. 반복적으로 생성된 익명 콜백은 나중에 일치시키기 어렵습니다. 또는 관련 핸들러 그룹에 AbortController를 제공하고 해당 신호를 리스너 옵션에 전달한 다음 장면이 끝나면 해당 그룹을 중단합니다. (removeEventListener)

이벤트 대상을 신중하게 선택하세요. 전역 창 리스너는 게임이 활성화된 동안 키에 적합할 수 있지만 버튼의 클릭 핸들러는 해당 버튼에 속합니다. 이벤트 전파가 의도적으로 디자인의 일부가 아닌 이상 동일한 작업에 대해 상위 위임 핸들러와 직접 핸들러를 모두 등록하지 마세요.

증상 점검으로 반복되는 장면 진입 테스트

장면을 열고 해당 작업을 한 번 누른 다음 나가고 다시 엽니다. 하나의 입력은 여전히 ​​하나의 효과를 발생시켜야 합니다. 이 사이클을 5회 반복하고 누를 때마다 응답 횟수가 1회로 유지되는지 확인합니다. 이는 메모리 측정이 아닌 기능 검사입니다. 또한 이전 장면의 입력이 종료 후 점수나 상태를 더 이상 변경하지 않는지 확인하세요. MDN은 그룹화 리스너에 대한 AbortSignal 지원을 문서화하고 익명 함수에는 명시적 제거를 위해 참조를 유지해야 한다는 내용을 기록합니다.

소유권에 맞춰 분해도를 유지하세요.

장면이 교체되면 해당 리스너가 참조하는 객체를 삭제하기 전에 해당 리스너를 중단하거나 제거하세요. 일부 리스너가 전체 애플리케이션 셸에 속하는 경우 매 라운드마다 제거하는 대신 수명이 더 긴 소유자로 유지하세요. 각 전환이 실수로 동일한 장면을 두 번 마운트하거나 정리를 건너뛸 수 있으므로 다시 시작, 일시 중지 및 메뉴로 돌아가기 흐름에 대한 회귀 사례를 추가합니다.

⁨중복된 게임 이벤트 리스너 방지⁩ 관련 질문

한 번의 키 누르기가 여러 게임 동작을 생성하는 이유는 무엇입니까?

동일한 작업에 등록된 핸들러가 여러 개 있을 수도 있고, 조상과 자식이 모두 이벤트를 처리할 수도 있습니다. 장면 수명 주기 경계에서 등록을 계산하고 이벤트 전파를 검사합니다.

AbortController가 이벤트 리스너를 제거할 수 있나요?

예. 동일한 신호를 사용하여 관련 리스너를 추가하고 소유자가 종료되면 중단을 호출합니다. 이는 그룹에 명확한 해체 경로를 제공합니다. 어느 소유자가 이를 제어하는지 결정하는 것을 대체하지 않습니다.

추가 읽을거리

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

계속 즐겨요.

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

궁금한 것을 더 찾아보세요