有没有一种方法可以使 SFML Event MouseButtonPressed 在单击后起作用?

is there's a way to make SFML Event MouseButtonPressed work after one click?

所以我正在尝试使用 sfml 制作一个小游戏,但我在 MouseButton 事件中卡住了一个,它没有解决问题

void draw(sf::RenderWindow &window)
{
    mousePos = window.mapPixelToCoords(sf::Mouse::getPosition(window));
    window.draw(Background_rect);
    for (int i = 0; i < 3; i++)
    {
        window.draw(rect[i]);
        if (rect[i].getGlobalBounds().contains(mousePos))
        {
            while (window.pollEvent(event))
            {
                if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left)
                {
                    mainMenuPress = mainMenuSelected[i];
                }
            }
        }
    }
}

所以我认为代码很好,但我不明白为什么点击 1 次后它不起作用

正如您展示的更多代码,我认为这个 for 循环可能是问题所在 - 你应该将 pollEvent 移动到你更新任何内容的地方,然后在其中进行任何 ifs 和循环

// in update
while (window.pollEvent(event))
{
    for (int i = 0; i < 3; i++)
    {
        if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left)
        {
            if (rect[i].getGlobalBounds().contains(mousePos))
            {
                mainMenuPress = mainMenuSelected[i];
            }
        }
    }
}

// and then draw

我无法解决它作为事件 mouseButtonPressed 我不知道事件类型有什么问题但它对我不起作用我不得不更改条件作为鼠标 isButtonPressed 并且它有效

void draw(sf::RenderWindow &window)
{
    mousePos = window.mapPixelToCoords(sf::Mouse::getPosition(window));
    
    window.draw(Background_rect);

    for (int i = 0; i < 3; i++)
    {
        if (rect[i].getGlobalBounds().contains(mousePos))
        {
            if (sf::Mouse::isButtonPressed(sf::Mouse::Left))  //Changed
            {
                mainMenuPress = mainMenuSelected[i];
            }
        }
        window.draw(rect[i]);
    }
}

感谢您的帮助