#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,但是它不能正常工作。这似乎与传统功能中的吸气剂和二传手相似,所以我不确定这里发生了什么...
伤害结束时#34;函数我放了一个断点,它有正确的大小,但然后在主函数中,它在我改变大小后绘制,在绘图中它始终为100在向量中的x。
答案 0 :(得分:0)
Healthbar Spaceship::getHealth()
您从getHealth()返回值,因此它始终是一个新实例,它是原始的副本,可能初始化为100大小。你可以改为引用一个引用,例如Healthbar& getHealth();