게임 영상

 

 추가된 사항
  • 배경 이미지를 넣었다.
  • 알파블렌딩 효과를 적용하였다.
  • 이동시 애니메이션 효과를 넣었다.
  • 다시하기, 스테이지 선택, 타이틀로 돌아가기 등 메뉴를 활성화했다.
  • 스테이지의 규격과 상관없이 데이터를 자동적으로 읽어올 수 있게 했다. 

 

나름 그래픽으로 이미지도 입혀서 그런지 마냥 별 볼일 없어보이진 않아서 만족한다. 

 


메뉴 구성하기

 

메인루프문에 해당하는 update 라인이다. 메뉴 전환은 switch와 enum 으로 관리하고 실제 해당 메뉴들의 함수들을 호출해서 동작시킨다. 

 

메뉴 관리하는 enum문

 

 

메뉴들

 

각 메뉴들은 클래스로 관리하고 있다.  아무래도 초반 설계부터 완벽하게 한게아니라 하나하나 배워가며 추가하다보니 데이터의 관리를 각 메뉴 클래스에게 맡겨버려서 불필요하게 클래스가 많아져버렸다. 나중에는 데이터를 관리하는 데이터베이스를 싱글톤으로 만든 후 각 메뉴에서 호출하고 관리하는 식으로 메모리를 절약해봐야겠다.


 

알파블렌딩 효과

 

알파블렌딩을 넣기위해 사용하는 코드이다. 딱봐도 무거워보이지만 나름대로 최적화를 열심히한 결과이다. 각 rgb값을 추출한 후 선형보간을 통해 색을 조합하는 방식이다. 

 

다음 수학 공식을 사용했다.  우선 선형 보간을 통해 각 끝의 색상 하얀색w과 검은색b을 섞는다.

xw + yb = 1 

이걸 전개하면 xw + (1 - x)b 라는 식을 만들어 낼 수 있는데, double과같은 부동 소수점으로 다루게되면 소수점 값을 출력하기 위해 비트연산을 해야하므로 255의 값을 곱한 후 계산을 하고 다시 255로 나누는 과정을 위에 식으로 표현했다. 저 식을 토대로 구현하면 알파블렌딩 효과가 생긴다.

 


이미지 출력하기

 

이미지 출력을 배정하는 함수이다. Status에서 현재 상태에 대한 enum을 읽어온 후 어떤 image를 출력해야하는지 id에 저장한다. 그리고 해당 id를 실제 이미지 클래스에 정보를 보내서 그리라는 명령을 한다. 이미지를 실제 그리는건 이미지 클래스이다. 

 

 


애니메이션 효과

 

m_moveCount로 이동을 감지하고, 이전 장면에서 어디서 왔는지를 기록해서 다음 장면을 한 픽셀씩 그래픽으로 그려낼 수 있도록 로직을 짰다. 이동시에는 이동키 입력을 차단한다.  

 

 


'프로젝트 > BamBoo Poop' 카테고리의 다른 글

[#2] bamboo poop - 이미지 입히기  (0) 2022.09.10
[#1] bamboo poop - 소코반 게임  (0) 2022.09.04