#include "Healthbar.h"
Healthbar::Healthbar(const sf::Vector2f& size, const sf::Vector2f& position)
: m_borderRect(size), m_bar(size)
{
m_borderRect.setOutlineColor(sf::Color::Red);
m_borderRect.setFillColor(sf::Color::White);
m_borderRect.setOutlineThickness(5);
m_borderRect.setPosition(position);
m_bar.setPosition(position);
m_bar.setFillColor(sf::Color::Green);
}
void Healthbar::draw(sf::RenderWindow& window)
{
window.draw(m_borderRect);
window.draw(m_bar);
}
void Healthbar::damage(int num)
{
m_bar.setSize(sf::Vector2f(m_bar.getSize().x - 100/num, m_bar.getSize().y));
}
int Healthbar::getBarSizeX() const
{
return m_bar.getSize().x;
}
在包含生命条的宇宙飞船类中:
Healthbar Spaceship::getHealth()
{
return m_health;
}
int Spaceship::getSizeX() const
{
return m_health.getBarSizeX();
}
与敌方舰队射弹和舰船互动的碰撞管理器:
void CollisionManager::shipProjectileCollision(EnemyFleet& fleet, Spaceship& ship)
{
for (int j = 0; j < fleet.getProjSize(); j++) {
if (ship.checkCollision(fleet.getProjectile(j))) {
ship.getHealth().damage(3);
}
}
}
在源文件中:
Spaceship ship;
std::cout << ship.getHealth().getBarSizeX() << std::endl; // = 100
ship.getHealth().damage(3);
std::cout << ship.getHealth().getBarSizeX() << std::endl; //should be 66.67
我正在制造太空入侵者。当宇宙飞船与弹丸相撞时,我试图将生命条的大小减小 ~33.33,但它不起作用。这似乎类似于传统函数中的获取器和设置器,所以我不确定这里发生了什么......
在"damage"函数结束时,我放置了一个断点,它的大小合适,但在主函数中,当我更改大小后它会绘制,并且在绘制过程中,向量中的 x 总是为 100。
Healthbar Spaceship::getHealth()
您从 getHealth(( 返回一个值,因此它始终是一个新实例,它是原始实例的副本,该实例可能初始化为大小为 100。您可以返回引用,例如 Healthbar& getHealth();