我正在尝试创建一个存储 Chest
vector 的类,其中 Chest
是我创建的自定义类。这是 ItemManager.h
的相关部分:
class ItemManager
{
public:
...
void GenerateItems(sf::Vector2u currentPos);
void CheckCollisions(Collider& collider);
...
private:
std::vector<Chest> chests;
};
然后这里是(的相关部分)
ItemManager.cpp
:void ItemManager::GenerateItems(sf::Vector2u currentPos)
{
if (rand() % 50 == 0)
chests.push_back(Chest(sf::Vector2f(16 * currentPos.x + 1, 16 * currentPos.y - 4 - 2)));
}
void ItemManager::CheckCollisions(Collider & collider)
{
for (Chest chest : chests)
if (collider.CheckCollision(chest.getCollider(), 1.0f))
chest.OnInteract();
}
我现在遇到的问题是,即使在
chest.OnInteract()
中调用 CheckCollisions()
,胸部也没有发生任何事情。但是,这不是该方法的问题,因为当我在 chest.OnInteract()
方法中调用 GenerateItems()
时,它会将预期应用到胸部。我的信念是,因为我在另一种方法中创建了一个局部变量来添加 vector
,所以被添加的对象超出了范围,我无法再引用它。然而,我相信添加到 vector
会创建一个拷贝,所以这应该不是问题。任何帮助表示赞赏。编辑
这是我的
OnInteract()
方法:void Chest::OnInteract()
{
open = true;
chest.setSize(sf::Vector2f(14, 16));
chest.move(sf::Vector2f(0, -2));
chest.setTextureRect(sf::IntRect(14, 0, 14, 16));
}
其中
open
和 chest
是 Chest
的成员变量。 最佳答案
你的循环:
for (Chest chest : chests) { ... }
将制作
Chest
对象的临时拷贝,因此将在该临时对象上调用 OnInteract()
方法。您想要的是对对象的引用,如下所示:for (Chest &chest : chests) { ... }
以便将更改(可能发生在
OnInteract()
方法中)应用于 chests
容器内的对象,而不是它们的临时拷贝。关于C++ - Vector 中的对象无法修改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42240288/