收藏品不会在联系时删除
Collectible not deleting on contact
>我创建了可收藏的对象和一个矢量来存储它们,以便在联系时轻松有效地删除。
我知道我的联系人侦听器有效,并且我的收藏品的标记、GetBody 和 SetUserData 函数也有效。
我尝试检查每个单独的收藏对象是否有联系,这确实有效,尽管由于其他原因抛出用户数据错误。
我知道这是有效的,因为如果我使用以下代码:
if (m_coin2->marked())
{
m_coin2->setFillColor(sf::Color::Blue);
}
有问题的硬币对象实际上会变成蓝色。
这是我的游戏头文件(仅限相关代码(:
class Game : public sf::Drawable {
private:
//Collectibles
Collectible* m_coin;
Collectible* m_coin2;
Collectible* m_coin3;
Collectible* m_coin4;
Collectible* m_coin5;
Collectible* scoreBlock;
Character* m_character;
//score
int score = 0;
public:
std::vector<Collectible> m_coins;
};
这是我的游戏.cpp文件(仅限相关部分(:
//In the constructor
//create collectibles
//hud elements
scoreBlock = new Collectible(m_pWorld, sf::Vector2f(scoreText.getPosition().x + .6f, -2.6f), sf::Vector2f(0.5f, 0.5f), 0.f, &m_collect);
//collectibles
m_coin = new Collectible(m_pWorld, sf::Vector2f(4.f, 2.15f), sf::Vector2f(0.3f, 0.3f), 0.f, &m_collect);
m_coin2 = new Collectible(m_pWorld, sf::Vector2f(16.5f, -0.6f), sf::Vector2f(0.3f, 0.3f), 0.f, &m_collect);
m_coin3 = new Collectible(m_pWorld, sf::Vector2f(30.f, 0.4f), sf::Vector2f(0.3f, 0.3f), 0.f, &m_collect);
m_coin4 = new Collectible(m_pWorld, sf::Vector2f(20.f, 1.4f), sf::Vector2f(0.3f, 0.3f), 0.f, &m_collect);
m_coin5 = new Collectible(m_pWorld, sf::Vector2f(47.f, -1.f), sf::Vector2f(0.3f, 0.3f), 0.f, &m_collect);
m_coins = { *m_coin, *m_coin2, *m_coin3, *m_coin4, *m_coin5 };
//In the update function
for (auto it = m_coins.begin(); it != m_coins.end(); it++)
{
if (it->marked())
{
m_pWorld->DestroyBody(it->GetBody());
m_coins.erase(it);
it->SetUserData();
score++;
}
}
目前,这对玩家和收藏品之间的接触没有任何影响,我认为这可能与我初始化矢量的方式有关?
任何帮助不胜感激,谢谢。
如果遍历向量,最好不要在迭代循环中使用向量的擦除函数。 请改用 while 循环。或者问题是你只使用硬币的副本,而不是指向硬币的指针。
这就是我要做的:
...
std::vector<Collectible*> m_coins;
...
m_coins = { m_coin, m_coin2, m_coin3, m_coin4, m_coin5 };
//In the update function
auto it = m_coins.begin();
while (it != m_coins.end())
{
if ((*it)->marked())
{
m_pWorld->DestroyBody((*it)->GetBody());
(*it)->SetUserData();
m_coins.erase(it);
score++;
}
it++;
}
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- C++中的线程安全删除
- 如何从存储在std::映射中的std::集中删除元素
- 收藏品不会在联系时删除