개발일지 (프레임워크 #2)

Gamediver·2023년 1월 28일
0

개발일지

목록 보기
4/6

오늘의 양식은 또 프레임워크다!

이번엔 텍스트가 아닌 코드로 뜯어보겠다

일단 게임루프는 위와 같이 while문으로 만들어주고
input, update, render로 구성이 된다 하였다

내가 테스트로 만들 프로그램은 아래와 같이 타이틀, 인게임, 엔딩 씬이 있으며
인게임 내에서도 스테이지가 3개로 나뉜다

여기서 이제 프레임워크의 구조를 한번 짜줘야한다

일단 게임 전체를 관리해줘야하기에 → Game 클래스를 생성해주어야 한다
Scene의 변화가 있어야 하기에 → Scene 클래스를 생성해주어야 한다
Stage의 변화가 있어야 하기에 → Stage 클래스를 생성해주어야 한다

아래와 같이 Class들을 생성해주었다

메인 함수가 있는 class에서는 깔끔하게 초기세팅과 작동만 하게끔 해주기 위해, Game클라스에다 함수를 생성해주었다

이제 Game 클라스 내에 input, update, render에 해당하는 함수들을 만들어준다
이로써 우리는 키입력을 받는 input, 입력받은 키를 바탕으로 게임데이터를 update, 업데이트 된 사항을 바탕으로 그려주는 render를 할 수 있게 되었다

이제 Scene을 건드려보자

우리는 타이틀, 인게임, 엔딩씬을 포함할 것이다
고로 enum 을 통해 씬을 정의해주자!

일단 각 씬에 해당하는 input, update, render함수를 생성해주자

그리고 한번 생각을 해봐야하는게, 씬을 바꾸려면 어떠한 요소들이 필요할까?
1) 현재 Scene
2) Scene을 바꿔야 하나?
3) 다음 Scene

고로 위 3개를 만들어준다

일단 타이틀씬부터 시작할꺼니까 currentscene은 타이틀로 두고, 나머지는 다 default로 두면 되겠다!

그럼 이제 씬에 필요한 요소들과 씬을 불러오기 위한 함수들도 다 만들었다

그럼 이제 씬을 출력하기 위해 Game 클라스로 돌아가 함수를 수정해줘야한다
게임이 지금이 무슨씬인줄 알고 출력을 해주겠는가? 고로 로직을 작성해줘야한다

짜란!
그럼 현재를 시점으로 게임을 작동하면
현재 _currentscene = SceneType.Title 임으로
ReceiveInput()에서는 InputTitle()이,
Update()에서는 UpdateTitle()이,
Render()에서는 RenderTitle()이 작동할 것이다!

그럼 이제 scene을 변환을 해줘야할것이다
scene 변환이 되는것을 확인하기 위해 render부분에 살짝 소금후추를 뿌려보겠다

지금 실행을 해보면 아래와 같이 title이 렌더되는 것을 확인할 수 있다

그럼 이제 scene간의 이동을 구현해보자
이동을 구현하기 위해서는 update부분에 소금후추를 뿌려줘야한다

일단 키입력을 받아주기 위해 key 를 만들어주고

Title scene에서 Ingame으로 가려면 'I'를
Ingame scene에서 Ending으로 가려면 'E'를
Ending scene에서 Title로 가려면 'T'를 누르게 하면 되는 로직을 아래와 같이 짜야한다

일단 다음씬을 로드하는 함수와 씬을 바꿔주는 함수를 만들었고

이를 Game 클라스의 렌더함수에 적용해서 만약 씬변화가 필요하다면, 해당씬을 다음씬으로 바꿔주는 과정이 생겼고(scene을 바꾸고나면, 씬변화가 필요없으니까 다시 false로 바꿔주었다)


그리곤 key를 입력받으면 다음 씬을 원하는 씬으로 로드하게끔 적용해주었다

위 코드를 실행하여 I, E, T를 누르면 아래와 같이 된다

씬 변화를 시키는데 생각보다 머리를 많이 써야하고, 복잡한 구조를 갖고 있다

이래서 프레임워크의 단점 중 하나가 학습하기 어렵다는 특징을 가졌던게 아닐까 싶다 ㅠ

다음 포스팅에서는 스테이지를 구성해볼까나..

profile
a random gameboy just walking past

0개의 댓글