프로젝트/[인프런] 게임 프로그래머 입문 올인원

[게임 프로그래머 입문 올인원] 2D게임 프레임워크 설계 : 스프라이트 (102강)

순정법사 2024.04.17

A. 2D게임 프레임워크 설계

1. 코드 정리하기

포트리스 모작한 코드를 그대로 재사용해서 만드는데

기존 코드 공부한걸 삭제하고 싶지않아서 GameCoding3라는 이름으로 하나 생성했다

 

a. 프로젝트 복사하기

 

[VSC] 프로젝트를 복사해 새 프로젝트로 만들기

A. 프로젝트를 복사해 새 프로젝트로 만들기 기존에 사용하던 코드를 지키고 싶어서 새로운 곳에서 시작할 예정 출처 : https://dltndltn.tistory.com/3 현재 프로젝트의 내용을 복사해서 다른 프로젝트

monamu.tistory.com

 

b. 코드 정리하기

불필요한 파일들은 다 파일에서 삭제 (프로젝트에서 제거 X) 해주고

 

txt파일도 삭제해준다 (repo를 복사해 txt파일은 다 없어졌다..)

 

💙 obj 파일?

파일 삭제할 때 보면 x64폴더에 obj파일이 생기는데 이게 빌드의 중간과정


따라서 위 폴더를 삭제해도 다시 생성되기 때문에 삭제해준다!

 

이렇게 삭제하면 수많은 에러가 나는데 모두 고쳐주자

 

모두 수정해주고, DevScene으로 설정해주면

 

여기부터 시작!

 

c. 폴더 정리하기

  • Resources : 리소스 관리하는 폴더
  • Binaries : 빌드한 결과물을 유도하는 폴더
  • Intermediate : 중간에 만들어지는 결과물

 

위와같이 생성해준다 (원래 여기에 저장되어야 한다..)

 

속성에 들어가서

 

출력 디렉터리 편집

 

출력물을 Binaries에 들어가도록 해주고

 

중간디렉터리는

 

출력 디렉터리 경로를 복사하고 Intermediate로 수정해준다

 

근데 내 리포는 복사된거라 소스코드 안에 작성된다 ㅜ_ㅜ (리소스는 밖으로 뺌)

 

그래도 결과물은 잘 저장되는중!

 

 

2. 스프라이트

🌟 게임 내에서 그래픽을 나타내는 데 사용되는 용어

 

2D 게임에서 캐릭터, 아이템, 배경 등의 이미지를 의미

게임 화면에 표시되고 사용자와 상호작용할 때 움직이거나 변함

 

3D 게임에서도 텍스처, 파티클, UI 요소 등을 스프라이트로 사용

기본적으로 비트맵 이미지나 벡터 이미지를 말함

 

a. 리소스 파일 다운받고 경로 지정해주기

파일 다운받음

 

파일 경로를 지정해주는 헤더를 pch에 추가해주고

 

리소스 매니저에서 리소스 경로를 얻을 정보를 생성해준다

 

또 init시 초기화하는 코드도 실행해준다 (여기서 다양한 코드 사용가능)

 

Game.cpp에서 리소스파일 경로를 game::init 실행시 설정해줘야 한다 / 주소는 \\ 두개

 

주소는 리소스파일 경로를 사용

 

원래는 저렇게 하드코딩하지 않고 이부분에 초기에 실행되어야 하는 모든 경로나 옵션파일을 추가해준다

 

💙 오브젝트와 리소스의 차이점

리소스는  하나, 여러명이 공유해서 사용한다는 점이 가장 큰 차이점 

ex) 가렌을 단일챔피언모드로 한다면 가렌 이미지를 10번 로드할 필요가 없음 

 

b. 텍스처 만들기

이미지 파일들을 보통 텍스처라는 용어로 사용 

 

ResourceBase를 상속받는 텍스쳐를 만들어줌

 

텍스처에 필요한 코드를 작성해준다

 

💙 용어 정리하기

코드에서 Vector와 표준에서 사용하는 vector가 대문자 하나 차이라서 헷갈리기에 Vec2로 이름을 변경

또한 int버전의 vector도 Vec2Int라는 이름으로 생성해준다

int버전으로 생성해주기

 

👉 여기서 transparent를 사용하는 이유

 

bmp파일이 RGB를 사용하고 있음 

 

옛날 스프라이트에서는 비트가 r,g,b 3개 1바이트씩 24비트

 

최근에는 알파까지 추가해 RGBA까지 넣어준다면

위에서 사용하는 transparent는 사용하지 않아도 되지만

 

지금 파일은 옛날 파일이라 RGB밖에 없음 + 따라서 A 넣어야함

 

이미지파일을 로드하는 함수 코드 등을 작성해준다

 

c. 이미지 가지고오기

위에서 만든 텍스처를 이미지 가지고오는 용도로 사용함 

 

리소스 매니저에서 리소스를 관리할 texture와 get,load 함수를 작성해주고

 

실질적으로 이미지를 불러오는 loadtexture함수를 작성해준다 (나중에 texture는 스마트포인터를 사용하는게 좋음 )

 

지워줄때에는 스마트 포인터 사용!

 

d. 이미지 테스트하기

devScene에서 이미지 테스트를 할 예정

 

영상 그대로 코드를 쳤는데, sword 이미지 파일이 없다...... 뭐지?

 

이미지 렌더링까지 해준다

 

그럼 이런 이미지가 생성된다

 

e. 스프라이트 생성하기

리소스인 텍스처를 조금 잘라쓰는 용도로 활용할 예정

 

이렇게 이미지를 보면 여러개의 이미지가 같이 붙어있음

 

스프라이트를 생성해주고 작성

 

텍스처랑 거의 비슷하게 사용됨

 

f. 스프라이트 리소스로 지정해주기

리소스매니저에서 스프라이트를 사용할 수 있도록 지정

 

로드된 텍스처를 사용하는 스프라이트라 위와같이 CreateSprite로 작성된다 

 

위 함수는 이렇게 생성됨

 

g. 스프라이트 렌더링하기

위에서 로드한 텍스처를 스프라이트로 만들어주고

 

렌더링해주기

 

그럼 그 부분만 딱 잘려나온다!

 

 

 


출처 : https://www.inflearn.com/course/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8-%EC%9E%85%EB%AC%B8-%EC%98%AC%EC%9D%B8%EC%9B%90-rookiss#curriculum

 

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 -

어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로 게임 프

www.inflearn.com