Post

2026-03-29 TIL (Weekend)

2026-03-29 TIL (Weekend)


구현한 기능

Battle Scene UI 개선 및 보상 시스템 연동

  • 몬스터 경험치 및 아이템 드랍 처리
    • 몬스터 처치 시 monster->isDead()를 통해 몬스터가 가진 경험치를 플레이어에게 전달 (player->AcquireEXP()).
    • 몬스터 객체 생성 시 할당한 드랍 테이블(Inventory) 내부의 아이템을 읽어와 플레이어 인벤토리로 전달하는 전리품 획득 로직 구현.
    • 전투 승리 UI에 획득한 경험치와 아이템 이름을 함께 출력하도록 개선.

Inventory 씬 연동 및 Turn 전환 처리

  • 사용한 아이템 이름 UI 출력
    • 인벤토리 씬에서 아이템을 사용하고 배틀 씬으로 돌아왔을 때, 어떤 아이템을 썼는지 텍스트로 띄워주기 위해 GameManagerUseItem_Name 변수 생성 및 저장.
  • 아이템 사용 시 턴 넘기기 (상태 머신 흐름 수정)
    • 배틀 씬 Update() 진입 시 GameManager에 저장된 아이템 이름이 있다면, 플레이어의 행동 선택을 건너뛰고 바로 battleState = 7 (아이템 사용 알림 및 몬스터 턴 대기)로 넘어가도록 흐름 수정.
    • 오작동을 막기 위해 메인 메뉴나 인벤토리 씬에 새로 진입할 때는 해당 변수를 ""(빈 문자열)로 초기화.





트러블 슈팅

렌더링 타이밍 오류 (아이템 Text [] 출력 버그)

오류

  • 증상: 인벤토리에서 아이템을 쓰고 왔는데, 배틀 씬에서 “플레이어는 [ ] 을(를) 사용했다”며 이름이 비어있거나, 이전 프레임의 다른 텍스트 잔해가 화면에 겹쳐서 출력되는 현상 발생.
  • 원인 파악
    1. 렌더링 루프의 이해 부족: Update()에서 다음 씬으로 넘어가기 전(Enter를 누르기 전)에 매 프레임마다 아이템 이름을 ""로 초기화해 버림. 이로 인해 0.05초 단위로 도는 Render()가 빈 문자열을 화면에 그림.
    2. 지우개 범위 오차: 화면의 텍스트를 지우는 ClearTextBox()가 17~18줄만 지우고 있었으나, 실제 텍스트는 16줄부터 출력되고 있어서 16줄의 잔해가 남음.

해결 방법

  1. 아이템 이름 변수 초기화 시점을 “유저가 알림 텍스트를 다 읽고 Enter를 눌러 다음 상태로 넘어가는 순간 (if (isKeyPressed) 내부)”으로 이동시켜 무한 루프와 빈칸 출력 방지.
  2. 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.