Урок 2. Разбор тестового кода, основной принцип работы sfml, обязательные функции SFML

В предыдущем уроке мы настроили среду разработки и запустили тестовый код. В этом уроке разберем каждую строку этого кода для лучшего понимания происходящего и рассмотрим пример из реальной жизни.

Видеоверсия http://www.youtube.com/watch?v=N1lovpBQTF4

 

Вот тот тестовый код:

Первой строкой кода нам необходимо подключить заголовочный файл, отвечающий за работу с графикой:

(к примеру когда будем использовать звуки в игре – мы подключим Audio.hpp)

Затем идёт главная функция языка C++ , которая должна присутствовать в каждой программе, написанной на C++. Выглядит в нашем случае она следующим образом:

Уже в теле этой функции происходят вызовы других функций. У SFML тоже есть обязательные функции и объекты. Например мы будем использовать объект, отвечающий за появление окна нашей игры. Выглядит он так:

Разберем по порядку эту строчку:

sf:: это пространство имён библиотеки SFML. Чтобы использовать функции и создавать объекты, относящиеся к этой библиотеке, необходимо перед началом каждой строки писать sf:: как в этом случае. Чтобы этого не делать каждый раз – можно написать такую строку перед int main()

В тестовом коде этого нету поэтому дальше примере с “sf::”. просто на будущее говорю вам.

Идём дальше. RenderWindow window создаёт как бы переменную (объект) окна с названием “window”. Затем в скобках идёт конструктор с параметрами. Первый параметр VideoMode(200, 200) – размер окна, далее идёт строка “SFML works!”, являющаяся заголовком окна. после этого можно использовать необязательные параметры, например sf::Style::Fullscreen, что сделает наше окно развернутым на весь экран, как полноценную игру.

Есть и другие параметры , посмотреть можно тут:

http://www.sfml-dev.org/tutorials/2.2/window-window.php

 

После того, как мы создали окно, давайте что нибудь нарисуем. В прошлом уроке в тестовом коде был зеленый круг. Здесь он красный:)

Первая строка создали объект shape класса CircleShape. В скобках указан размер. Вторая строка – залили круг красным цветом.

Далее идёт обязательный цикл для SFML, который можете переводить для понимания как : “Пока окно открыто – выполняй то, что внутри цикла”, встречайте:

 

По сути этот цикл бесконечен и выход из него только один – закрыть окно программы. (или выдернуть компьютер из розетки:))

Чтобы окно могло закрыться ниже идет 6 строк кода. Итак, есть некое “SFML-евское” событие event, строка – sf::Event event;

Это событие принимает состояние закрытого, когда мы закрываем окно нашей игры (на крестик например, или альт+ф4) и попросту говоря условие (6 строка) спрашивает : “если событие event приняло значение Closed, то программа закрывает окно. Такие вот необходимые условности. Более подробно написано опять же здесь:

http://www.sfml-dev.org/tutorials/2.2/window-window.php

После этого идут функции :

window.clear(); – очищает экран.
window.draw(shape); – рисует объект.
window.display(); – всё это показывает.

Мы имеем бесконечный цикл, в котором очень быстро первым делом очищается экран, рисуется объект, затем всё это показывается нам. и так происходит , пока мы не закроем окно. Можно привести аналогию с блокнотом и анимацией из детства. Вы открываете блокнот (окно игры), он уже очищен для рисования первого слайда, вы рисуете картинку, когда нарисовали можете её кому то показать. потом всё это повторяется, когда вы перелистываете лист блокнота и рисуете другой слайд для анимации – ваш лист опять чист, вы опять что то рисуете, опять можете показать кому то. изрисовав весь блокнот , вы можете его пролистывать и наблюдать анимацию вашего рисунка. Представьте, что вы пришли к другу и пролистываете этот блокнот бесконечно, пока он не скажет вам хватит.

и получается: у нас есть персонаж в игре. при нажатии стрелки вправо он бежит вправо. представьте, что он бежит в вашем блокноте , вами же нарисованный. иначе говоря, примерно тоже самое происходит у нас в программе (игре).надеюсь с примером стало понятнее.

На этом всё. В следующем уроке научимся выводить изображение на экран на примере создания главного героя.

P.S. Знайте перевод всех английских слов, использованных в коде. Это ускорит понимание. Если встретили незнакомое слово – не поленитесь и зайдите в переводчик :)

 

Буду благодарен, если поделитесь:
SFML вопросы, прошу, задавайте на форуме.

Добавить комментарий