Coding Feature.

SFML 게임 제작 공부 #2. SFML 라이브러리 개발 환경 구축하기. 본문

Game Development/SFML 게임 제작 공부

SFML 게임 제작 공부 #2. SFML 라이브러리 개발 환경 구축하기.

codingfeature 2023. 9. 2. 17:18

Reference.

 

우선 SFML을 다운로드 하기 위해 아래 링크에 접속해본다.

https://www.sfml-dev.org/download.php

 

Download (SFML)

 

www.sfml-dev.org

 

왼쪽 상단에 가장 최근 SFML(현재는 2.6.0) 버전을 클릭한다.

 

위와 같은 창에서 Visual Studio 버전, 그리고 32또는 64bit를 고를 수 있게 하는데

현재 사용하고 있는 Visual Studio는 2022 버전이므로 가장 위 두 버전 중에 골랐다.

이때 위 내용에서 알 수 있듯이 32bit 또는 64bit를 고를 때는 내가 사용하는 OS를 기준으로 하는 게 아니라,

개발한 프로그램이 컴파일되고 실행되는 플랫폼을 기준으로 다운받아야 한다고 한다.

따라서 내가 Window 64bit이지만 32bit 버전을 다운받고 사용해도 아무 문제는 없다는 것. 다만 프로그램이 4GB 메모리 이상을 사용한다면 문제가 발생할 수 있지만 그럴 경우는 없다고 보면 된다고 한다.

이번에는 "Visual C++ 17 (2022) - 32-bit"를 다운로드 했다.

 

그 다음 다운로드 받은 압축파일을 풀고 C 드라이브로 옮겼다.

 

 

그다음 Visual Studio 2022를 실행하고 빈 프로젝트를 생성했다. 그리고 소스 파일에 'main.cpp'라는 파일을 생성했다.

그 다음 프로젝트명을 오른쪽 클릭한 뒤에 속성을 클릭했다.

 

우선 가장 위 부분에 구성과 플랫폼을 각각 '모든 구성'과 'Win32'로 변경했다.

이번에 사용하는 라이브러리 버전이 32bit 플랫폼을 기준으로 했기 때문이다.

 

그리고 C/C++ 속성에 들어가 일반 탭에서 '추가 포함 디렉터리'에 이미 다운로드받은 SFML 폴더 내의 'include' 폴더 위치를 추가해줬다.

 

그 다음 링커 속성에 들어가 일반 탭에서 '추가 라이브러리 디렉터리'에 이미 다운로드받은 SFML 폴더 내의 'lib' 폴더 위치를 추가해줬다.

 

그 후 같은 링커 속성의 일반 탭 바로 아래에 있는 입력 탭에 '추가 종속성'에 다음과 같은 값을 입력했다.

sfml-graphics.lib

sfml-window.lib

sfml-system.lib

sfml-network.lib

sfml-audio.lib

이는 이전 포스트에서 설명한 대로 SFML의 5가지 모듈(graphics, window, system, audio, network)를 사용하기 위해 추가해준것이다.

 

속성은 모두 설정했으므로 적용한 뒤 확인을 누른다.

 

마지막으로 SFML의 DLL(Dynamic Link Library)를 소스 파일이 있는 위치에다 옮겼다.

DLL 파일들의 위치는 다운로드받은 SFML 폴더 내 bin 디렉터리에 있다.

파일명 뒤에 d가 있는 것도 있고 없는 것도 있는데 d가 있는 것은 디버그용이라고 한다.

필요한 DLL를 복사해서 소스 파일이 있는 곳에 붙여넣기를 한다.

이로써 SFML 개발 환경 세팅을 완료되었다.

 

제대로 개발 환경이 세팅되었는지 확인하기 위해 다음과 같은 코드를 작성해보았다.

흰색 배경의 창에 회색 원을 가운데에 띄우는 코드이다.

#include <SFML/Graphics.hpp>
#include <iostream>

#define SCREEN_WIDTH 800	// 창의 너비.
#define SCREEN_HEIGHT 600	// 창의 높이.
#define CIRCLE_RADIUS 200	// 원의 반지름.

int main() {
	// 창 생성.
	sf::RenderWindow window(sf::VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT), "My window");
	
	// 원 초기화.
	sf::CircleShape circle(CIRCLE_RADIUS);

	// 원의 위치와 색상 설정. 원의 위치는 창의 가운데에 원의 중심이 위치하도록 설정.
	circle.setPosition(SCREEN_WIDTH / 2 - circle.getLocalBounds().width / 2, SCREEN_HEIGHT / 2 - circle.getLocalBounds().height / 2);
	circle.setFillColor(sf::Color(100, 100, 100));

	// 창이 계속 떠있는 동안 프로그램 실행.
	while (window.isOpen()) {
		
		// 지난 loop 동안의 모든 event 확인.
		sf::Event event;
		while (window.pollEvent(event)) {
			// event가 종료임.
			if (event.type == sf::Event::Closed)
				// 창 끄기.
				window.close();
		}

		// clear -> draw -> display 과정을 통해 화면에 요소 그림.
		window.clear(sf::Color::White);

		window.draw(circle);
		window.display();
	}
	return 0;
}

처음에 위 코드에서 에러가 발생했었는데 #include 에서 SFML/Graphics.hpp 를 찾지 못한다는 에러였다.

이는 Visual Studio 화면 가장 상단에 있는 활성 솔루션 구성과 플랫폼을 프로젝트에 맞게 바꿔서 해결했다.

SFML의 32bit를 기준으로 구성했기 때문에 x64를 x86으로 변경한 뒤에 에러가 사라지는 것을 확인할 수 있었다.

그 외에도 SFML 프로그래밍을 하면서 에러가 발생할 수 있는데, 해결 방법 중 위 세팅을 바꾸면서 (Debug를 Release 로 바꾼다던지  등) 해결해보면 좋을 것이다.

 

결과 창:

 

다음부터는 본격적인 게임 제작을 위한 State Machine과 Manager, Game Loop 등을 구현해보는 것을 공부해보기로 했다.

 

그리고 위 코드를 구현하기 위해

SFML 공식 Documentation 사이트에 있는 Tutorial

 

2.6 Tutorials (SFML / Learn)

 

www.sfml-dev.org

를 참고했는데 튜토리얼이 굉장히 잘 설명되어있어서 많은 도움이 되었다. 나중에도 계속 찾아서 보면 좋을 것 같다.