c++ - 调用函数时类对象成员变量不会改变
问题描述
我的问题是我无法更改类成员变量值,我尝试了所有想到的东西
所以这里涉及到以下代码:
if(player.getCollisionObject().isColliding(platform1))
{
if(player.getCollisionObject().up)
std::cout << "Colliding from top\n";
if(player.getCollisionObject().down)
std::cout << "Colliding from bottom\n";
if(player.getCollisionObject().left)
std::cout << "Colliding from left\n";
if(player.getCollisionObject().right)
std::cout << "Colliding from right\n";
}
bool Collision::isColliding(const Entity &other)
{
resetCollisionDirection();
sf::Vector2f otherCenterPosition = other.getCenterPosition();
sf::Vector2f otherSize = other.getSize();
float deltaX = m_CenterPosition.x - otherCenterPosition.x; // abs(deltaX) - (thisX + otherX)
float deltaY = m_CenterPosition.y - otherCenterPosition.y;
float resultX = abs(deltaX) - (m_Size.x / 2 + otherSize.x / 2);
float resultY = abs(deltaY) - (m_Size.y / 2 + otherSize.y / 2);
if(resultX < 0 && resultY < 0)
{
if(m_CenterPosition.x < otherCenterPosition.x)
left = true;
if(m_CenterPosition.x > otherCenterPosition.x)
right = true;
if(m_CenterPosition.y < otherCenterPosition.y)
up = true;
if(m_CenterPosition.y > otherCenterPosition.y)
down = true;
return true;
}
return false;
}
class Collision
{
public:
Collision(const Entity &entity);
void reset(const Entity &entity);
bool isColliding(const Entity &other);
bool up, down, left, right;
private:
void resetCollisionDirection();
private:
sf::Vector2f m_CenterPosition, m_Size;
};
所以问题是我的播放器类中有一个 Collision 的类成员,并且我正在从我的播放器访问 Collision 对象并检查它是否与另一个对象发生冲突,如果是,它将返回 true 并且还应该设置内部从哪个方向发生碰撞的标志,但在它从“isColliding()”函数返回后,来自 Collision 对象的标志尚未设置
我真的不明白这里可能是什么问题,我尝试调试它并尝试一步一步地跟随。我的观察是,它确实在函数调用期间设置了标志,但是一旦它返回,信息就丢失了
任何帮助,将不胜感激!
编辑:这是 getCollisionObject() 函数:
Collision Player::getCollisionObject()
{
return m_CollisionBody;
}
编辑:发现上面的函数返回一个副本的问题(对不起,我是个白痴)将其更改为
Collision& Player::getCollisionObject()
{
return m_CollisionBody;
}
解决方案
有你的问题。 getCollisionObject()
按值返回。将其更改为
Collision &Player::getCollisionObject()
推荐阅读
- reactjs - 盖茨比无法建立静态页面
- r - 如何在R中更改下划线前后的单词顺序
- random-forest - PMML:我可以得到随机森林类预测的概率,但为什么我不能得到置信度分数?
- android - Jetpack Compose 中的深层链接导航
- javascript - 如何在 React 中动态命名变量
- java - 在 android studio 默认导航抽屉中使用片段和 firebase 添加个人资料页面
- html - 带有图像的样式容器
- javascript - 使用旧输入值提交的 VueJS 3 响应式表单
- android - 使用 Android Clean Architecture 的异步请求
- python - Python检测字符串是否包含特定长度的子字符串