Я создал коллекционные объекты и вектор для их хранения для легкого и эффективного удаления при контакте.
Я знаю, что мой контактный слушатель работает, и что мои отмеченные функции GetBody и SetUserData также для моих коллекционных предметов
Я пробовал проверять каждый индивидуальный коллекционный объект на предмет контакта, который действительно работает, хотя и вызывает ошибку пользовательских данных по другим причинам.
Я знаю, что это работает, потому что если я использую следующее code:
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++;
}
}
На данный момент это ничего не делает при контакте между игроком и предметом коллекционирования, я думаю, это может быть связано с тем, как Я инициализировал вектор?
Любая помощь приветствуется, спасибо.