# Skybound Red Striker Movement Jitter Fix

작성일: 2026-04-26 21:15 KST

## 요청 요약

- 빨간 적기가 여전히 어디에 낀 것처럼 바들바들 떨린다.
- 이전 수정 이후에도 실제 플레이 화면에서 동일 증상이 보여 원인을 다시 확인해야 한다.

## 확인 결과

빨간 적기 계열의 떨림은 단순한 스프라이트 문제가 아니라 이동 로직과 렌더링 좌표가 동시에 만드는 문제로 판단했다.

확인한 주요 지점:

- `CombatSystem.updateStrikerAI`
- `CombatSystem.applyEnemySeparation`
- `GameRenderer.renderEnemies`
- `GameRenderer`의 lock-on indicator 렌더링
- `EntityManager.spawnEnemy`의 pooled enemy 초기화

## 핵심 원인

`updateStrikerAI`에서 스트라이커가 목표 X 좌표에 가까워진 뒤에도 아래 방식으로 계속 밀어붙이고 있었다.

```ts
e.x += Math.sign(desiredX - e.x) * 1.1
```

이 방식은 목표점을 살짝 지나친 다음 다음 프레임에 반대 방향으로 다시 움직이게 만든다.

결과적으로 목표 지점 근처에서 좌우로 계속 오버슈트가 발생해 “어디에 낀 것처럼 떠는” 느낌이 난다.

추가로 적기 분리, 중력형 스킬, 락온 표시가 같은 적을 동시에 참조하면 실제 좌표의 미세 보정이 화면에 그대로 노출될 수 있었다.

## 적용한 해결 방향

스트라이커 이동은 오버슈트가 나지 않는 감쇠형 접근으로 변경했다.

렌더링은 실제 충돌 좌표와 별개로 표시용 좌표를 한 번 더 부드럽게 보간한다.

즉 게임 로직은 기존처럼 정확한 실제 좌표를 사용하고, 화면에 보이는 위치만 안정적으로 따라가게 했다.

## 적용한 변경

### 스트라이커 AI 오버슈트 제거

수정 파일:

- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/CombatSystem.ts`

변경 내용:

- `Math.sign(...) * 1.1` 고정 이동 제거
- 목표 지점까지 남은 거리보다 더 많이 움직이지 않도록 제한
- 목표 X 근처에서 좌우 ping-pong이 발생하지 않게 감쇠 이동 적용

### 적기 표시 좌표 스무딩 추가

수정 파일:

- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/types.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/GameRenderer.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/EntityManager.ts`

추가 필드:

- `renderX`
- `renderY`
- `renderRotation`

적용 내용:

- 적기 실제 좌표가 순간 보정되더라도 화면 좌표는 부드럽게 따라간다.
- 너무 큰 위치 차이가 있으면 순간이동/스폰으로 판단하고 즉시 스냅한다.
- pooled enemy 재사용 시 이전 적기의 표시 좌표가 남지 않도록 spawn 시 초기화한다.

### 락온 표시 떨림 완화

수정 파일:

- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/GameRenderer.ts`

변경 내용:

- 락온 브라켓이 실제 좌표가 아니라 `renderX`, `renderY`를 우선 사용하게 변경
- 적기 본체는 부드러운데 락온 표시만 떨리는 상황을 방지

## 검증

- `npm run build` 성공
- 출력 디렉터리: `dist/49`
- TypeScript 빌드와 Vite production build 모두 통과

## 기대 효과

- 빨간 스트라이커가 목표 지점 근처에서 좌우로 바들바들 떠는 현상 완화
- 적기 분리, 중력 스킬, 락온 UI가 함께 작동해도 화면상 움직임이 더 안정적으로 보임
- 충돌 판정은 실제 좌표를 유지하므로 게임플레이 정확도는 유지

## 추가 관찰 포인트

이번 수정은 스트라이커 AI의 명확한 오버슈트 원인을 제거한 것이다.

만약 특정 스킬 영역 안에서만 떨림이 남는다면 다음 후보는 gravity mine 또는 vortex pull 계열의 강제 위치 보정이다. 이 경우에는 해당 pull force에도 속도 기반 감쇠를 적용하는 것이 좋다.
