4.1 KiB
4.1 KiB
62. 애니메이션 및 피드백 동기화 관련 이슈 진행 현황
1. 문제 발생 현상
- 플레이어 공격 실패(
MISS) 시, 화면에MISS텍스트가 두 번 올라오는 현상 발생. - 적의 방어 실패(
FAILED) 시에도 유사한 중복 텍스트 현상 발생. - 로그상 (
[UI Debug] Feedback Event)으로는 이벤트가 한 번만 발생했지만, UI에는 두 번 표시됨. _addFloatingEffect함수 내부에eventId기반의 중복 체크 로직이 추가되었음에도 현상 지속.
2. 진단 및 해결 시도
2.1. 원인 가설
BattleScreen인스턴스 중복: 가장 유력한 가설. 하나의EffectEvent가 발생했을 때, 여러BattleScreen인스턴스가 각자 이벤트를 받아 화면에 피드백 텍스트를 띄우는 경우.[UI Debug] BattleScreen initialized: ${hashCode}로그로 확인 필요. (현재 확인되지 않음)
_addFloatingEffect내부의setState문제:setState호출 시_floatingFeedbackTexts리스트에 위젯이 중복으로 추가되거나, 위젯 렌더링 과정에서 불필요한 복제가 발생하는 경우. (리스트clear()로직 추가로 해결 시도 중)- UI 렌더링 타이밍/시각적 착시:
FloatingFeedbackText위젯의 생명주기가 꼬여서 이전 텍스트가 완전히 사라지기 전에 새 텍스트가 뜨거나, 애니메이션이 반복되는 것처럼 보이는 착시.
2.2. 현재까지 적용된 주요 조치
EffectEventeventId기반 중복 체크 (UI 레벨):_addFloatingEffect함수에서eventId를 기반으로 동일한 이벤트에 대한 피드백 텍스트가 이미 리스트에 있다면 추가하지 않도록_floatingFeedbackTexts.any((e) => e.eventId == event.id)로직 추가._floatingFeedbackTexts.clear()도입: 새로운 피드백 텍스트(MISS/FAILED)가 뜰 때, 기존의 모든 피드백 텍스트를 리스트에서 제거한 후 추가하도록 수정. (화면에 항상 하나의 피드백 텍스트만 유지)addPostFrameCallback제거:_addFloatingEffect내WidgetsBinding.instance.addPostFrameCallback제거 (불필요한 비동기 지연 및 잠재적 문제 방지).- 디버그 로그 추가:
[UI Debug] BattleScreen initialized: ${hashCode}(BattleScreen초기화 횟수 확인용)[UI Debug] Feedback Event: ${event.id}, Type: ${event.feedbackType}(_addFloatingEffect호출 확인용)FloatingFeedbackText에event.id전체 표시 (화면상 ID 일치 여부 확인용)
3. 남아있는 문제 (현재 진단)
- 로그상
[UI Debug] Feedback Event는 한 번만 찍히지만, 화면에는MISS텍스트가 두 번 표시됨.- 이는 UI 레벨에서의 렌더링 문제이거나,
_addFloatingEffect함수 내부 로직 중setState가 비정상적으로 두 번 호출되는 문제일 가능성이 높습니다. _floatingFeedbackTexts.clear()로직이 추가되었으므로, 같은 리스트에 두 번 추가되는 것은 막혔을 것입니다.
- 이는 UI 레벨에서의 렌더링 문제이거나,
4. 다음 단계 제안
[UI Debug] BattleScreen initialized: ...로그 결과 확인: 이 로그가 두 번 이상 찍힌다면BattleScreen인스턴스가 중복된 것이므로,MainWrapper나 라우팅 구조를 점검해야 합니다.- 화면상
MISS텍스트의 ID 확인: 화면에 보이는 두 개의MISS텍스트의 ID가 정확히 동일한지 확인 필요 (현재event.id전체를 표시하도록 수정됨).- ID가 동일하다면: 하나의
FeedbackTextData객체가 UI에 중복 렌더링되는 문제. (Key 문제,Stack리빌드 문제 등) - ID가 다르다면:
_addFloatingEffect자체가 두 번 호출된 것. (로그가 하나라는 것과 모순됨. 로그 시스템 확인 필요)
- ID가 동일하다면: 하나의
현재까지의 모든 문제 해결 노력은 BattleProvider 내의 로직 중복이나 타이밍 오류를 잡는 데 초점을 맞췄습니다. 하지만 MISS 텍스트 중복 문제는 BattleScreen (UI) 쪽에서 발생하는 현상으로 보입니다.