경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!==== 스프라이트 0 히트 플래그 ==== [[PPU_OAM#Sprite_zero_hits|스프라이트 0 히트]]는 OAM의 첫 번째 스프라이트(스프라이트 0)와 배경 간의 픽셀 단위 충돌을 감지하는 하드웨어 충돌 감지 기능이다. 스프라이트 0 히트 플래그는 스프라이트 0의 불투명한 픽셀이 배경의 불투명한 픽셀과 겹칠 때 즉시 설정되며, 스프라이트 우선 순위와는 무관하다. '불투명'은 픽셀이 '투명'하지 않다는 것을 의미한다. 즉, [[PPU_pattern_tables|두 패턴 비트]]가 %00이 아니다. 플래그는 프리렌더 스캔라인의 도트 1까지 설정된 상태를 유지하므로 프레임당 하나의 충돌만 감지할 수 있다. 이 플래그는 충돌을 감지하지만 주로 타이밍에 사용된다. 많은 게임에서 스프라이트 0을 화면의 고정된 위치에 배치하고 이 플래그가 설정될 때까지 폴링한다. 이를 통해 CPU는 화면에서 대략적인 위치를 파악하여 하드웨어 레지스터에 대한 화면 중간 쓰기 시간을 맞출 수 있다. 일반적으로 이것은 ''슈퍼 마리오 브라더스''와 같이 배경 기반 HUD를 허용하기 위해 화면 중간에 스크롤 위치를 변경하는 데 사용된다. 그러나 일부 최신 홈브루 게임은 [https://forums.nesdev.org/viewtopic.php?t=15850 ''Lunar Limit''] 및 [https://fiskbit.itch.io/irritating-ship ''Irritating Ship'']과 같이 실제 충돌에 이를 사용한다. 스프라이트 0 히트는 X=255에서 또는 [[#PPUMASK|PPUMASK]]를 통해 스프라이트나 배경이 비활성화된 곳에서는 충돌을 감지할 수 없다. 여기에는 가장 왼쪽 8픽셀이 숨겨져 있을 때 X=0..7이 포함된다. 그러나 PAL의 왼쪽 및 오른쪽 가장자리 자르기에는 영향을 받지 않는다. 타이밍에 이 플래그를 사용할 때 몇 가지 중요한 고려 사항이 있다. * 스프라이트 0 히트는 프리렌더 스캔라인까지 지워지지 않으므로 소프트웨어는 이전 프레임의 히트를 현재 프레임의 히트로 착각할 수 있다. 따라서 플래그가 다시 설정되기를 기다리기 전에 플래그가 지워질 때까지 폴링해야 할 수 있다. * 게임이 스프라이트 0 히트가 발생할 것으로 예상하고 발생하지 않으면 종종 충돌이 발생한다. 히트가 발생하지 않을 위험이 있는 경우(아마도 스크롤할 때 겹침이 발생하지 않거나 전원 주기, 콘솔 또는 에뮬레이터에 따라 달라질 수 있는 정확한 화면 중간 타이밍에 의존하기 때문에) 폴링 루프를 빠져나갈 다른 방법이 있는 것이 중요하다. 예를 들어, vblank 플래그를 폴링하거나 NMI 핸들러가 게임이 여전히 스프라이트 0 히트를 폴링하고 있는지 확인하여 이를 수행할 수 있다. * 게임은 종종 랙 프레임에서 스프라이트 0 히트를 처리하지 않아 화면 중간 이벤트가 발생하지 않는다. 이로 인한 일반적인 결과는 랙 중에 HUD가 깜박이는 것이다. 적어도 랙 프레임에서 NMI 핸들러에서 스프라이트 0 히트를 처리하면 이 문제를 해결할 수 있다. 요약: 한식구 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 한식구위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 자동 편집 스팸으로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요: 취소 편집 도움말 (새 창에서 열림)