Краткий урок о том, как добавить полоску здоровья в Вашу игру:
Видеоверсия: https://www.youtube.com/watch?v=-ITolo9V4FI
Создаем заголовочный файл LifeBar.h и закидываем вот такой код:
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 |
using namespace sf; class LifeBar { public: Image image; Texture t; Sprite s; int max; RectangleShape bar; LifeBar() { image.loadFromFile("images/life.png"); image.createMaskFromColor(Color(50, 96, 166)); t.loadFromImage(image); s.setTexture(t); s.setTextureRect(IntRect(783, 2, 15, 84)); bar.setFillColor(Color(0, 0, 0));//черный прямоугольник накладывается сверху и появляется эффект отсутствия здоровья max = 100; } void update(int k)// k-текущее здоровье { if (k>0) if (k<max) bar.setSize(Vector2f(10, (max - k) * 70 / max));//если не отрицательно и при этом меньше максимума, то устанавливаем новое значение (новый размер) для черного прямоугольника } void draw(RenderWindow &window) { Vector2f center = window.getView().getCenter(); Vector2f size = window.getView().getSize(); s.setPosition(center.x - size.x / 2 + 10, center.y - size.y / 2 + 10);//позиция на экране bar.setPosition(center.x - size.x / 2 + 14, center.y - size.y / 2 + 14); window.draw(s);//сначала рисуем полоску здоровья window.draw(bar);//поверх неё уже черный прямоугольник, он как бы покрывает её } }; |
Можете сами отделить .cpp реализацию и будете молодцы, я у оставлю так.
Как работает? Имеется картинка, есть черный прямоугольник с изначальным размером 0. Берем здоровье персонажа (начальное значение 100), при уменьшении здоровья увеличивается черный прямоугольник , который покрывает нашу картинку сверху (т.к window.draw написано позже).
Подключим в main.cpp
1 |
#include "LifeBar.h" |
Далее объявим:
1 |
LifeBar lifeBarPlayer;//экземпляр класса полоски здоровья |
и вызываем update
1 |
lifeBarPlayer.update(100);//сюда передаем значение, которое надо нарисовать. Можно передать здоровья игрока тогда будет lifeBarPlayer.update(player.getHealth()); так |
Теперь рисуем и всё готово
1 |
lifeBarPlayer.draw(window);//рисуем полоску здоровья |
А если у вас однообразный хил бар, то можно просто отображать его через .setTextureRect(IntRect()); Я вот со своим
Вложение:
спасибо, очень простой и красивый способ)