Кратко разберем как можно создать менюшку.
Видеоверсия: http://www.youtube.com/watch?v=DweFb9btMVo
Мы уже умеем ловить наведение курсора на спрайт, рисовать один спрайт поверх другого и многое другое. Применим это всё в создании меню.
До вызова функции int main() у нас будет описано меню.
Для меню нужны картинки, вот мои (они прозрачные и их плохо видно, поэтому ниже ссылка на архив):
https://yadi.sk/d/TeJ8OyRNkzQFn
Теперь выше int main() пилим ф-цию меню (у меня она в отдельном .h файле, лучше впилите так же и подключите его в main.cpp)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
void menu(RenderWindow & window) { Texture menuTexture1, menuTexture2, menuTexture3, aboutTexture, menuBackground; menuTexture1.loadFromFile("images/111.png"); menuTexture2.loadFromFile("images/222.png"); menuTexture3.loadFromFile("images/333.png"); aboutTexture.loadFromFile("images/about.png"); menuBackground.loadFromFile("images/Penguins.jpg"); Sprite menu1(menuTexture1), menu2(menuTexture2), menu3(menuTexture3), about(aboutTexture), menuBg(menuBackground); bool isMenu = 1; int menuNum = 0; menu1.setPosition(100, 30); menu2.setPosition(100, 90); menu3.setPosition(100, 150); menuBg.setPosition(345, 0); //////////////////////////////МЕНЮ/////////////////// while (isMenu) { menu1.setColor(Color::White); menu2.setColor(Color::White); menu3.setColor(Color::White); menuNum = 0; window.clear(Color(129, 181, 221)); if (IntRect(100, 30, 300, 50).contains(Mouse::getPosition(window))) { menu1.setColor(Color::Blue); menuNum = 1; } if (IntRect(100, 90, 300, 50).contains(Mouse::getPosition(window))) { menu2.setColor(Color::Blue); menuNum = 2; } if (IntRect(100, 150, 300, 50).contains(Mouse::getPosition(window))) { menu3.setColor(Color::Blue); menuNum = 3; } if (Mouse::isButtonPressed(Mouse::Left)) { if (menuNum == 1) isMenu = false;//если нажали первую кнопку, то выходим из меню if (menuNum == 2) { window.draw(about); window.display(); while (!Keyboard::isKeyPressed(Keyboard::Escape)); } if (menuNum == 3) { window.close(); isMenu = false; } } window.draw(menuBg); window.draw(menu1); window.draw(menu2); window.draw(menu3); window.display(); } //////////////////////////////////////////////////// } |
Итак сначала как всегда создали текстуры, загрузили картинки, залили спрайты, дали им позицию. Затем пока наше меню активно (изначально оно активно bool isMenu=1), то рисуем элементы этого меню (при этом если наводим на них, то окрашиваем в синий цвет). Если нажали клавишу esc, то происходит выход из этого цикла и соответственно выход из функции меню, и затем просто будет идти наш процесс игры.
Соответственно нужно будет в main.cpp в самом начале после создания окна window вызвать наше меню и передать ему окно.
1 2 |
RenderWindow window(sf::VideoMode(1376, 768), "Kychka-pc.ru 31"); menu(window);//вызов меню |
Вот так это выглядит. я не парился насчет красоты, Вы у себя сами красоту наведёте)
Вот так у меня выглядит страничка “О программе”
Готово, теперь можно сделать меню в своей игре:)
Можно сделать ф-цию меню более крутой, добавить выбор разрешения, громкость игры и многое другое, а потом всё это внедрить в саму игру. Лучше для этого сделать ф-цию инициализации, где будут создаваться все объекты в игре, в зависимости от выбранных настроек.
В следующем уроке разберем как быстро сделать рестарт в игре.