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
댓글