在一个函数中使用有效的 setter 进行更改会在另一个函数中重置回其旧状态
Changing with what is effectively a setter in one function resets back to its old state in another function
#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();
相关文章:
- 为什么系统函数总是在C++中返回已转移的退出状态?
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 状态 () 函数
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 删除使数据处于"错误状态"的默认构造函数的模式?
- sql记录集函数的状态设计模式
- C++生成器 10.2 基于函数的优化状态"unknown attribute 'optimize' ignored"
- 如何在函数内部使用 zmq(以非阻塞方式)在客户端请求时获取函数的状态?
- 将来自类的特定实例的函数分配给变量以保持状态
- 保持 boost.process 在函数之外处于活动状态,该函数被调用
- 如何安全地防止在 Wininet 中调用状态回调函数
- 如何保持异步函数中使用成员的shared_ptr对象的活动状态?
- 尝试使用 std::函数(未定义的符号)声明模板化类状态时出现链接错误
- 从状态内的自定义函数(不是操作)提升 MSM 调用process_event?
- 尝试访问类向量中的函数,而不更改向量的私有状态
- C++中构造函数和布尔的安全空状态:
- C++从函数返回的 2D 数组,错误:以非零状态退出
- 类的堆分配对象是否在其作用域之后但在 C++ 中调用其析构函数之前处于活动状态