Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

Класс Player

Перед написанием класса Player, опишем задачи, с которыми должны справляться объекты данного класса:

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

Рассмотрим закрытые свойства класса Player:

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

Структура Borders определяет переменные задающие границы перемещения игрового объекта типа Player в графическом окне. По умолчанию границы задаются согласно размеру графического окна, которые передаются по ссылки window.

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

Объекты SpritePlayer и AnimPlayer создают анимированное отображение игрового персонажа. Свойство step устанавливает шаг перемещения игрового персонажа по оси Х и оси Y. Свойство pos – это начальные координаты игрового персонажа. timeUpdate – свойство подсчёта интервала времени, по окончанию которого периодически будет обновляться игровая логика. Свойство dead – устанавливает статус игрока жив или мёртв.

Рассмотрим открытые методы класса Player:

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

В перечислении direction, создадим список направлений, в которых будет двигаться игровой объект типа Player.

В параметрах конструктора передаём: ссылку на графическое окно sf::RenderWindow& window, начальные координаты персонажа sf::Vector2f mypos=sf::Vector2f(90,365), имя загружаемой текстуры игрового персонажа std::string const& texture = "image/SPRITESHEET.png", время проигрывания всех кадров анимации float time = 0.5, размер кадров анимации sf::Vector2i spriteSize=sf::Vector2i(100, 100), количество кадров анимации int frame=6 и шаг перехода по вертикали на следующую анимацию int stepy=100. В теле конструктора создаём анимацию и инициализируем переменные, обозначающие максимальное значения границ перемещения персонажа по вертикали и горизонтали.

Методы SetStep(), изменяют шаг перемещения плеера.

Метод move(), задаёт шаг и направление перемещения плеера.

Метод update(), перемещает объект, учитывая интервал времени обновления игровой логики.

Далее идут вспомогательные методы. Метод setBordersPlayer() устанавливающий границы в которых может перемещаться плеер. Метод setDead() устанавливающий статус жизнь — смерть. Метод getDead() возвращающий текущий статус плеера. Метод getPlayer() возвращающий ссылку на спрайт плеера.

Разберём подробно все описанные выше методы.

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

Метод move() устанавливает направление движения плеера, инициализируя значением соответствующий шаг перемещения. А также изменяет текущую анимацию персонажа, в зависимости от выбранного направления движения.

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

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

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

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

Давайте теперь используем класс Player в нашей разработке.

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

В классе игровой движок подключим заголовочный файл Player.h. Создадим объект типа Player и назовём его bee, все параметры оставим по умолчанию за исключением графического окна, которое передадим по ссылке. Далее создаём объект прямоугольник drop — это будет капля. Объявим переменную tm, подсчитывающую пройденный интервал времени, спустя который будет периодически выполняться игровая логика.

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

В методе input() создадим обработчик событий - нажатия на клавиши стрелки.

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

В этом обработчике метод плеера move(), будет получать соответствующий вектор направления движения, в зависимости от нажатой клавиши. Если клавиша будет отпущена, обозначенный вектор инициализируется нулевым значением.

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

В методе update() обновляем игровую логику объекта плеер. Высчитываем нужный интервал времени tm, после чего получаем ссылку на спрайт объекта плеер mybee. Перемещаем объект drop по вертикали вниз каждый пройденный интервал времени на один пиксель используя метод move(0,1). Если положение объекта drop превышает установленные максимальные границы, устанавливаем его координаты в начальные. В случае пересечения прямоугольника с объектом типа спрайт плеера drop.getGlobalBounds().intersects(mybee.getGlobalBounds() устанавливаем координаты для прямоугольника в начальное положение rop.setPosition(drop.getPosition().x, 0), а плееру статус мёртв bee.setDead(true).

Разберём более детально процесс определения момента столкновения двух графических объектов.

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

Каждый графический объект SFML в своём интерфейсе имеет метод возвращающий глобальный ограничивающий прямоугольник - метод getGlobalBounds().

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

Метод intersects() проверяет - существует ли пересечение между двумя ограничивающими прямоугольниками, границы которых возвращает метод getGlobalBounds().

В параметрах метод intersects() получает глобальный ограничивающий прямоугольник проверяемого объекта. В случае пересечения прямоугольников данный метод возвращает значение true.

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

В методе draw() рисуем пчелу и падающую каплю объект drop в графическом окне window. Чтобы нарисовать пчелу сначала получаем ссылку на спрайт объекта плеер drawBee и передаём её в метод draw() объекта window.

В конструкторе класса Engine незабываем установить начальные настройки объекта drop().

Пчела на работе, разработка игр на SFML C++ часть 4 "Класс Player"

Более подробную инструкцию вы можете получить, посмотрев видео «Игра на SFML C++ Пчела на работе часть 4 класс Player»

11
2 комментария

Ля, а автор этого гайда в комментах отвечает?
Я так, на будущее. Думаю завтра потыкать кнопочки и оформить это все в копи-пасту в студии, а потом уже поэксперементировать

Ответить

Буду очень рад!

Ответить