본문 바로가기
Game Programming Study 게임 개발 프로그래밍 공부

[SFML / Code::Blocks] 게임 타이틀 시작 로고 화면 및 메뉴 UI 테스트 데모

by byungwoo733 2023. 4. 29.
728x90
반응형
SMALL

main.cpp

#include <SFML/Graphics.hpp>
#include <iostream>
#include "Menu.h"

int main()
{
    float width = 1280, height = 720;
    sf::RenderWindow window(sf::VideoMode(width, height), "SFML WORK!");

    //Menu Background
    sf::Texture texture;


    if (!texture.loadFromFile("images/bg.png"))
    {
        std::cout << "Load failed" << std::endl;

        system("pause");
    }


    sf::Sprite menuBg;
    menuBg.setTexture(texture);

    menuBg.setPosition(sf::Vector2f(640, 360));
    sf::Rect<float> size = menuBg.getGlobalBounds();
    menuBg.setOrigin(sf::Vector2f(size.width / 2, size.height / 2));

    //End of Menu BG code

    //Menu
    Menu menu(window.getSize().x, window.getSize().y);


    while (window. isOpen())
    {
        sf::Event event;

        while (window.pollEvent(event))
        {
            switch (event.type)
            {
            case sf::Event::KeyReleased:
                switch (event.key.code)
                {
                case sf::Keyboard::Up:
                    menu.MoveUp();
                    break;

                case sf::Keyboard::Down:
                    menu.MoveDown();
                    break;

                case sf::Keyboard::Return:
                    switch (menu.GetPressedItem())
                    {
                    case 0:
                        std::cout << "Play Button has been pressed" << std::endl;
                        break;
                    case 1:
                        std::cout << "Option Button has been pressed" << std::endl;
                        break;
                    case 2:
                        window.close();
                        break;
                    }

                    break;
                }
                    break;
            case sf::Event::Closed:
                window.close();

                break;
            }
        }
        window.clear();
        window.draw(menuBg);
        menu.draw(window);
        window.display();
    }
}

 

------------------------------------------------

Menu.cpp

 

#include "Menu.h"

Menu::Menu(float width, float height)
{
    if(!font.loadFromFile("font/arial.ttf"))
    {
        //handle error
    }

    menu[0].setFont(font);
    menu[0].setColor(sf::Color::Red);
    menu[0].setString("Play");
    menu[0].setPosition(sf::Vector2f(width / 2, height / (MAX_NUMBER_OF_ITEMS + 1) *1));

    menu[1].setFont(font);
    menu[1].setColor(sf::Color::White);
    menu[1].setString("Options");
    menu[1].setPosition(sf::Vector2f(width / 2, height / (MAX_NUMBER_OF_ITEMS + 1) *2));

    menu[2].setFont(font);
    menu[2].setColor(sf::Color::White);
    menu[2].setString("Exit");
    menu[2].setPosition(sf::Vector2f(width / 2, height / (MAX_NUMBER_OF_ITEMS + 1) *3));

    selectedItemIndex = 0;
}

Menu::~Menu()
{

}

void Menu::draw(sf::RenderWindow &window)
{
    for (int i = 0; i < MAX_NUMBER_OF_ITEMS; i++)
    {
        window.draw(menu[i]);
    }
}

void Menu::MoveUp()
{

    if(selectedItemIndex - 1>= 0)
    {
        menu[selectedItemIndex].setColor(sf::Color::White);
        selectedItemIndex--;
        menu[selectedItemIndex].setColor(sf::Color::Red);
    }
}

void Menu::MoveDown()
{

    if(selectedItemIndex + 1 < MAX_NUMBER_OF_ITEMS)
    {
        menu[selectedItemIndex].setColor(sf::Color::White);
        selectedItemIndex++;
        menu[selectedItemIndex].setColor(sf::Color::Red);
    }
}

------------------------------------------------

Menu.h

#pragma once
#include <SFML/Graphics.hpp>

#define MAX_NUMBER_OF_ITEMS 3

class Menu
{

public:
    Menu(float width, float height);
    ~Menu();

    void draw(sf::RenderWindow &window);
    void MoveUp();
    void MoveDown();
    int GetPressedItem() { return selectedItemIndex; }

private:
    int selectedItemIndex;
    sf::Font font;
    sf::Text menu[MAX_NUMBER_OF_ITEMS];
};

================================

"(가칭) "example Man's Game" 게임 타이틀 시작 로고 화면 테스트 및 메뉴 UI 데모1 (타이틀 화면 뒷 배경 샘플 이미지1 포함)

 

============================

"(가칭) "example Man's Game" 게임 타이틀 시작 로고 화면  및 메뉴 UI 테스트 데모2 (타이틀 화면 뒷 배경 샘플 이미지2 포함)

 

============================

"(가칭) "example Man's Game" 게임 타이틀 시작 로고 화면 테스트 및 메뉴 UI 데모3 (타이틀 화면 뒷 배경 샘플 이미지3 포함)

 

 

* (주의) 여기 예제나 글들은 게임개발에 도움이 되는 정보 보다는 개인 공부을 위한 것이어서 옳은 방법이 아닐 수 있으니 참고바랍니다.

728x90
LIST

댓글