私はSFMLを使ってゲームを書いていますが、私のボタンには少し問題があります。ここで私はボタンがクリックされたかどうかを確認するために使用する機能は次のとおりです。SFMLボタンが2回トリガーする
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;
}
それはほとんど正常に動作し、まだ私は、このボタンを押したら、私はそれをダブルクリックするように時々、アクションは私もそれを解放didntのも、カントー、二回trigerredされますまだ。私はsf::Event::MouseButtonReleased
を関与させようとしましたが、実際には助けにもなりませんでした。私が達成したいことはもちろん、1つのボタンのプレス/リリース/何でも1つのアクションだけです。
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();
}