【发布时间】:2017-12-22 21:26:25
【问题描述】:
我正在使用 SFML 编写游戏,但我的按钮出现了小问题。这是我用来检查按钮是否被点击的函数:
bool InputManager::isSpriteClicked(sf::Sprite object, sf::Mouse::Button button, sf::RenderWindow &window) {
if (sf::Mouse::isButtonPressed(button)) {
sf::IntRect rect(object.getPosition().x, object.getPosition().y,
object.getGlobalBounds().width, object.getGlobalBounds().height);
if (rect.contains(sf::Mouse::getPosition(window))) {
return true;
}
}
return false;
}
它几乎可以正常工作,但有时一旦我按下这个按钮,就会触发两次动作,就像我双击它一样,即使我还没有释放它。我试图让sf::Event::MouseButtonReleased 参与进来,但它实际上也没有帮助。我想要实现的当然是每 1 个按钮按下/释放/无论如何只有 1 个动作。
如果需要,这是我的GameLoop 示例
void GameState::handleUserInput() {
sf::Event evnt;
while (this->m_data->window.pollEvent(evnt)) {
if (this->m_data->input.isSpriteClicked(this->m_rollButton, sf::Mouse::Left, this->m_data->window)) {
m_gameEngine.startTurn(m_gameStatusBox);
}
}
void GameState::update(sf::Time dt) {
m_gameEngine.getActivePlayer().move(dt);
}
void GameState::draw() {
this->m_data->window.display();
}
【问题讨论】: