2026-03-29 TIL (Weekend)
2026-03-29 TIL (Weekend)
구현한 기능
Battle Scene UI 개선 및 보상 시스템 연동
- 몬스터 경험치 및 아이템 드랍 처리
- 몬스터 처치 시
monster->isDead()를 통해 몬스터가 가진 경험치를 플레이어에게 전달 (player->AcquireEXP()). - 몬스터 객체 생성 시 할당한 드랍 테이블(
Inventory) 내부의 아이템을 읽어와 플레이어 인벤토리로 전달하는 전리품 획득 로직 구현. - 전투 승리 UI에 획득한 경험치와 아이템 이름을 함께 출력하도록 개선.
- 몬스터 처치 시
Inventory 씬 연동 및 Turn 전환 처리
- 사용한 아이템 이름 UI 출력
- 인벤토리 씬에서 아이템을 사용하고 배틀 씬으로 돌아왔을 때, 어떤 아이템을 썼는지 텍스트로 띄워주기 위해
GameManager에UseItem_Name변수 생성 및 저장.
- 인벤토리 씬에서 아이템을 사용하고 배틀 씬으로 돌아왔을 때, 어떤 아이템을 썼는지 텍스트로 띄워주기 위해
- 아이템 사용 시 턴 넘기기 (상태 머신 흐름 수정)
- 배틀 씬
Update()진입 시GameManager에 저장된 아이템 이름이 있다면, 플레이어의 행동 선택을 건너뛰고 바로battleState = 7(아이템 사용 알림 및 몬스터 턴 대기)로 넘어가도록 흐름 수정. - 오작동을 막기 위해 메인 메뉴나 인벤토리 씬에 새로 진입할 때는 해당 변수를
""(빈 문자열)로 초기화.
- 배틀 씬
트러블 슈팅
렌더링 타이밍 오류 (아이템 Text [] 출력 버그)
- 증상: 인벤토리에서 아이템을 쓰고 왔는데, 배틀 씬에서 “플레이어는 [ ] 을(를) 사용했다”며 이름이 비어있거나, 이전 프레임의 다른 텍스트 잔해가 화면에 겹쳐서 출력되는 현상 발생.
- 원인 파악
- 렌더링 루프의 이해 부족:
Update()에서 다음 씬으로 넘어가기 전(Enter를 누르기 전)에 매 프레임마다 아이템 이름을""로 초기화해 버림. 이로 인해 0.05초 단위로 도는Render()가 빈 문자열을 화면에 그림. - 지우개 범위 오차: 화면의 텍스트를 지우는
ClearTextBox()가 17~18줄만 지우고 있었으나, 실제 텍스트는 16줄부터 출력되고 있어서 16줄의 잔해가 남음.
- 렌더링 루프의 이해 부족:
해결 방법
- 아이템 이름 변수 초기화 시점을 “유저가 알림 텍스트를 다 읽고 Enter를 눌러 다음 상태로 넘어가는 순간 (
if (isKeyPressed)내부)”으로 이동시켜 무한 루프와 빈칸 출력 방지.ClearTextBox()의 반복문 범위를 16~18줄로 수정하여 텍스트 찌꺼기 없이 화면을 깔끔하게 지우도록 개선.
SceneManager Return Scene의 오류
- 증상: 전투 중 인벤토리를 열어 포션을 먹고 배틀 씬으로 돌아오면, 싸우던 몬스터가 사라지고 새로운 몬스터가 풀피로 스폰되는 버그 발생.
- 원인 파악
SceneManager::Return_Scene()함수의 로직 오류.- 상단에 띄워진 씬(인벤토리)을
pop()하고 난 뒤, 밑에 깔려있던 이전 씬(배틀 씬)을 다시 꺼낼 때Init()함수를 명시적으로 재호출하고 있었음. - 이로 인해 배틀 씬이 일시정지(Pause) 후 재개(Resume)되는 것이 아니라, 몬스터 객체를 새로 생성하는 초기화 로직이 다시 돌아가 버린 것.
해결 방법
Return_Scene()내부의SceneStack.top()->Init();호출 코드를 삭제.- 기존 씬으로 돌아올 때는 상태를 그대로 유지한 채
Update()와Render()만 이어서 실행되도록 Scene의 생명주기(Lifecycle) 설계를 올바르게 교정함.- (돌아왔을 때 UI가 겹치는 문제는
Update진입 시system("cls")를 한 번 호출하여 깔끔하게 정리)
This post is licensed under CC BY 4.0 by the author.
