C & C++/SFML

SFML 강좌 2 - Window 생성🔨

KALILIVE 2022. 3. 7. 14:16
반응형
 Audio module 음향, 스트리밍 (음악 또는 커스텀된 소스), 녹음, 사운드 공간화
 Graphics module 2D 그래픽 모듈 : 텍스트, 도형, 스프라이트(Sprites) 등을 지원한다.
 Network module Socket을 이용해 커뮤니케이션, 유틸리티 그리고
하이레벨 네트워크 프로토콜(HTTP, FTP)을 지원한다.
 System module SFML의 모듈을 이용해 각종 유틸리티들을 정의한다.
 Window module OpenGL에서 Window를 지원하고 입력에 관한 이벤트를 제공한다.

SFML에서 윈도우 창을 다루는 모듈은 Window module이므로 해당 해더 파일을 가져온다.

#include <SFML/Window.hpp>

윈도우창 생성

SFML의 윈도우는 sf::Window로 정의되어 있다.

아래 코드로 윈도우창을 생성하고 열어보자.

#include <SFML/Window.hpp>

int main(void)
{
	sf::Window window(sf::VideoMode(800, 600), "My window");

	return 0;
}

위 코드를 실행하면 잠깐 윈도우창이 생성되었다가 사라질 것이다.

왜냐하면 위 명령어는 윈도우창을 생성하는 기능만 있을 뿐 유지하지 않기 때문에 생성한 뒤 return으로 넘어가 프로그램이 종료된다.

 

그럼 이제 윈도우 창을 유지하기 위한 명령어를 작성해 보자

#include <SFML/Window.hpp>
#include <stdio.h>

int main()
{
    sf::Window window(sf::VideoMode(800, 600), "My window");
    unsigned long long n = 0;

    // 윈도우 창이 열여있을때까지 윈도우를 유지
    while (window.isOpen())
    {
        //loop문의 반복 되는 동안 모든 윈도우의 이벤트를 체크한다.
        sf::Event event;

        while (window.pollEvent(event))
        {
            printf("%llu\n",n);
            n++;

            // 윈도우 창이 닫히는 이벤트가 발생하면 윈도우 창을 닫는다.
            if (event.type == sf::Event::Closed)
                window.close();
        }
    }

    return 0;
}

반복문을 이용해 Window가 열여 있을 때까지 반복문을 이용하고 윈도우가 열여 있을 때

발생하는 이벤트를 확인해서 만약 윈도우창의 X 버튼을 누르는 이벤트가 발생하면 window창을

지우는 방법으로 윈도우 창을 유지한다.

움직일 때마다 포착되는 이벤트 횟수를 n이란 변수에 저장해서 출력하므로

움직일 때마다 이벤트가 포착되는 것을 가시적으로 확인할 수 있다.

 

추가적으로 sf::Window는 3번째 인자를 선택적으로 허용하고 있다.

만약 원하는 스타일이 있으면 추가적으로 3번째 인자를 통해 받고있는데

주로 쓰이는 스타일은

sf::Style::None 아무런 스타일을 주지 않는다(공백화면을 제공)
이 스타일은 다른 아무것과도 상호작용할 수없다.
sf::Style::Titlebar 타이틀바를 가진 윈도우창을 생성한다.
sf::Style::Resize 윈도우창의 크기를 조절할 수 있고 전채화면 버튼이 보인다.
sf::Style::Close 닫기 버튼이 있는 윈도우창 스타일로 변경한다.
sf::Style::Fullscreen 윈도우가 풀스크린 모드가 된다.
이 스타일은 다른 아무것도 상호작용할 수 없다.
유효한 비디오 모드가 필요함
sf::Style::Default 기본 스타일
Titlebar,Resize,Close 3개의 스타일을 기본으로 설정하고 있다.
#include <SFML/Window.hpp>

int main(void)
{
    sf::Window window(sf::VideoMode(800, 600), "My window",sf::Style::Default);

    // 윈도우 창이 열여있을때까지 윈도우를 유지
    while (window.isOpen())
    {

        //loop문의 반복 되는 동안 모든 윈도우의 이벤트를 체크한다.
        sf::Event event;

        while (window.pollEvent(event))
        {
            // 윈도우 창이 닫히는 이벤트가 발생하면 윈도우 창을 닫는다.
            if (event.type == sf::Event::Closed)
                window.close();

        }
    }

	return 0;
}

window를 선언할때 3번째 인자로 위처럼 설정하면 윈도우의 스타일을 설정할 수 있다.

 

이런 방법으로 윈도우를 우리가 흔히 사용하는 것처럼 유지할 수 있다.

다음 강좌 이번에 살짝 다뤄봤던 이벤트에 대해서 설명하겠습니다.


#Note 

2022-03-07 작성 완료

 

반응형

'C & C++ > SFML' 카테고리의 다른 글

SFML 강좌 1 - SFML 설명 및 설치 (비주얼 스튜디오 2019)  (2) 2022.03.01