【发布时间】:2017-05-03 02:36:01
【问题描述】:
我在处理 SFML 中的事件时遇到了一些问题。我正在制作一个回合制游戏,当鼠标移动或单击鼠标左键时,我检查是谁在转弯,然后在该对象位置产生一个射弹,当射弹与地形或对手相撞时,它会被摧毁并转弯被改变。
这种行为不是我所期望的。当点击射击时,弹丸有时根本不会产生(它会立即改变转弯)。我已经禁用了所有碰撞,所以不能这样。我 90% 确定问题出在我如何处理事件上,所以我真的很感谢关于如何让它变得更好的意见。
我学到的是,你不应该执行 while poll 事件中的函数,它只是为了记录最近发生的事情,所以我把它们放在外面。但这并不能解决我的问题...
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;
}
}
【问题讨论】: