我在SFML中遇到了一些事件。我正在制作一款基于转机的游戏,当鼠标移动或鼠标左键点击时,我会检查whos是否转动,然后在该物体位置产生一个抛射体,当抛射体与地形或对手相撞时,它会被破坏,转动被改变。处理鼠标事件SFML
行为不是我所期待的。点击发射时,弹丸有时不会产生(并且它会立即改变转向)。我禁用了所有的碰撞,所以它不能这样。我90%确定这个问题与我如何处理事件有关,所以我真的很喜欢输入关于如何让它变得更好的输入。
了解到的是,您不应该在while轮询事件中执行函数,它只能用于注册最近发生的事件,所以我将它们放在外面。这并不能解决我的问题,但...
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;
}
}