У меня есть некоторые проблемы с событиями в SFML. Я делаю игру с разворотом, когда мышь переместилась или нажала левую кнопку мыши, я проверяю, кто ее поворачивает, а затем порождает снаряд в этой позиции объекта, когда снаряд столкнулся с каким-либо ландшафтом или противником, который он уничтожил, и поворот изменяется.Управление событиями мыши SFML
Поведение не то, что я ожидаю. При щелчке стрелять снаряд иногда не будет появляться вообще (и он меняет ход сразу). Я отключил все столкновения, так что это не может быть. Im 90% уверен, что проблема связана с тем, как я обрабатываю события, поэтому id действительно использует данные о том, как я могу сделать это лучше.
Из чего вы узнали, что вы не должны выполнять функции во время опроса, но только для регистрации того, что произошло в последнее время, поэтому я вместо этого выставляю их снаружи. Это не решает мою проблему, хотя ...
sf::Event event;
sf::Vector2i mousePos;
while (_window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
_window.close();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) {
_window.close();
}
if(event.type == sf::Event::MouseMoved) { // <- this is how you check to see if an event
mousePos = sf::Mouse::getPosition();
moved = true;
}
if(event.type == sf::Event::MouseButtonPressed) { // <- this is how you check to see if an event
mousePressed = true;
}
}
if (mousePressed && tank1Turn)
{
sf::Vector2f spawnPos = _t1->getPos() + sf::Vector2f(0, -150);
sf::Vector2f initVel = _t1->getInitVel();
cout << endl;
_p = new Projectile(spawnPos, initVel);
tank1Turn = false;
tank1Firing = true;
mousePressed = false;
}
if (mousePressed && tank2Turn) {
sf::Vector2f spawnPos = _t2->getPos()+sf::Vector2f(0,-150);
sf::Vector2f initVel = _t2->getInitVel();
_p = new Projectile(spawnPos, initVel);
tank2Turn = false;
tank2Firing = true;
mousePressed = false;
}
if (tank1Turn && moved) {
_t1->aim(mousePos);
moved = false;
mousePressed = false;
}
if (tank2Turn && moved) {
_t2->aim(mousePos);
moved = false;
mousePressed = false;
}
}