Часть 1
"Hello World"Прежде чем мы начнём, важно понять одно: мы делаем не красивую картинку, а максимум функционала, красоту будем наводить после, и по желанию.
Примерно так будет выглядеть готовая игра (но никто не мешает нам сделать лучше)
Из активных элементов здесь будут:
- убийственные ветки
- наш товарищ дровосек и его незаменимый топор
- тучки и пчёлка
- срубленные куски дерева
- счёт, таймер и надписи
А так-же статичный фон и дерево.
Теперь нам необходимо скопировать наш проект, созданный на прошлом уроке: https://telegra.ph/Ustanovka-SFML-dlya-Visual-Studio-11-03
и для удобства(по желанию) переименовать проект в Timber.
После этого открываем папку bin в SFML и копируем все dll в папку с вашим main.cpp файлом
Осталось добавить в проект картинки, звук и шрифт, они будут отдельным архивом после поста. Содержимое архива нужно распаковать в эту-же папку.
Теперь папка вашего проекта должна выглядеть следующим образом.
Подготовка закончена, теперь перейдём непосредственно к игре
Каждый пиксель экрана имеет свою координату, так выглядит экран 1920х1080
Центр экрана 1920х1080 имеет координаты 960 и 540, но если мы выведем персонажа в эту точку, то получим то, что вы видите на картинке.
Картинки, которые мы выводим, называются спрайтами, и у каждого спрайта есть исходная точка, и по умолчанию она стоит на левом верхнем углу.
Хватит теории, давайте уже сделаем что-то!
#include "stdafx.h"
#include <SFML/Graphics.hpp> //здесь мы подключаем библиотеку для работы с графикой
using namespace sf; //теперь здесь будет не std, а sf
int main()
{
// создадим видео режим для разрешения нашего монитора
VideoMode vm(1920, 1080); //здесь будут ваши значения
// создадим окно
RenderWindow window(vm, "Timber!!!", Style::Fullscreen);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed) // это пока объяснять не буду, оно просто нужно нам, чтобы всё хорошо работало
window.close();
}
/*
****************************************
Здесь будет ввод игрока
****************************************
*/
if (Keyboard::isKeyPressed(Keyboard::Escape)) //если нажать ескейп, то окно закроется
{
window.close();
}
/*
****************************************
обновление объектов
****************************************
*/
/*
****************************************
отрисовка объектов
****************************************
*/
//очистка буфера с прошлого кадра
window.clear();
// здесь будем рисовать объекты
// передаём картинку из буфера на экран
window.display();
}
return 0;
}