프로젝트 일지/C#

[C#/TIL] TextRPG 개인 과제에서 겪은 것들 (1)

톰마토 2025. 2. 3. 20:27
728x90

오늘 겪은 문제들

TextRPG 개인 과제 하다가 진짜 처음부터 당황스러웠던 것

1. 생각해 보니 C#에는 헤더파일이 없네?

2. 그럼 다른 파일에 만든 클래스를 어떻게 받아올까!? 

=> namespace를 활용함. 같은 namespace라면 서로 접근이 가능. namespace가 다른 경우 include 하듯이 using문으로 가져올 수 있다.

 

SceneBase를 interface로 했다가, class로 바꿈.

나만의 이유.

1. GameManager에서 "현재 씬" 이라는 존재를 부모 클래스 형태로 하나만 가지고 있고, 그 객체를 통해 Update를 돌리기 위함. (주 목적)

2. Start 함수와 Update 함수에서 공통된 할 일이 생길까봐 

하.. 근데 씬 변환이 생각보다 많은 것 같아서 자식 씬들을 미리 생성해놓고 사용하도록 만들까 고민이다. 지금은 LoadScene할 때마다 현재 씬의 타입에 따라 그 씬을 만들어서 로드하는 중이다. 

 

화면 깜빡임

게임 Update함수를 입력할 때까지 멈춰서 대기타지 않고, 계속 Update가 돌고 있다가 입력이 있을 때 특정 로직을 실행하도록 변경하고 싶었다. 기존에는 Update함수 내에서 while문을 또 놓고 ReadKey나 ReadLine로 제대로 입력할 때까지 기다리면서 받았다.

-> Update함수 내에 있는 while문을 없애고 Console.KeyAvailable을 사용해서 입력이 없어도 Update함수가 계속 돌도록 만드는 데에 성공했었다. 그러나 더 큰 문제 발생!!!! 바로바로 화면 깜빡임.

  • 해결하기 위한 첫 번째 방법은 더블 버퍼링이다. API나 다이렉트로 게임 개발을 배울 때도 이미지가 깜빡이는 현상 때문에 더블 버퍼링 기법을 사용했었다. 그려야 하는 것들을 한 곳에 그려놓고 한 번에 출력하는 방법이다. 
    콘솔 게임에서도 StringBuilder를 활용해서 Buffer에 String을 쌓아놓고 한 번에 출력할 수 있다. 내가 생각하는 이상적인 방법인데, 지금 구조에서 언제부터 버퍼를 쌓고 언제 한 번에 출력해야 하며 버퍼는 언제 생성해서 지워야 하는지 잘 모르겠다...
  • 두 번째 방법은 Console.Clear()을 사용하지 않고 Console.SetCursorPosition(0, 0); 를 통해서 커서를 이동해서 일부분만 덮어쓰는 것이다. 일단 이 방법이 지금의 출력 구조를 크게 변경할 필요가 없어서 좋아보인다. 단점은 어디서부터 덮어쓸 것인지 하나씩 세어보고 하드코딩해야 한다.

일단 기간이 많이 남지 않아 디테일한 욕심을 부릴 때가 아니라서.. while문 돌리며 입력받는 것으로 되돌려놓았다. 꽤 바보같은 코드로 냅둔 상태.

게다가 지금 씬마다 비슷한 코드가 넘쳐나는 중인데 어떻게 묶을 수 없을지..!!!!! 큰 고민 중이다... 하하하 분명 초반까지는 재미있었는데 하루종일 하다보니 생각할 게 너무 많다!!

😂😂😂😂😂

728x90