【问题标题】:SFML mouseButtonPressed on SpriteSFML mouseButtonPressed 在 Sprite 上
【发布时间】:2016-08-29 22:20:14
【问题描述】:

我试过用 SFML 做一个按钮,但是当我点击 Sprite 时,程序打印:“你没有按下按钮”..

Window.cpp:

while(m_window.pollEvent(event))
        {
            switch(event.type)
            {
                 case sf::Event::MouseButtonPressed:
                 std::cout << "MouseButtonPressed !" << std::endl;
                 if(buttonEnter.eventMouse(m_window.mapPixelToCoords(
                    {event.mouseButton.x, event.mouseButton.y})))
                 {
                    std::cout << "You did press the Button " << std::endl;
                 }
                 else
                 {
                    std::cout << "You didn't press the Button" << std::endl;
                 }
                 break;

                case sf::Event::Closed:
                m_window.close();

                default:
                break;
            }
        }

还有 Button.cpp (buttonEnter)

bool Button::eventMouse(sf::Vector2f const &cursor_position)
{
    std::cout << "eventMouse" << std::endl;

    bool test = m_spriteButton.getGlobalBounds().contains(
    cursor_position.x,cursor_position.y);

    return test;
}

程序打印(当我点击 Sprite 时): 鼠标按钮按下! 事件鼠标 你没有按下按钮

{ 我认为我的代码(Windows.cpp 和 Button.cpp)很好,所以这就是我的全部代码:https://github.com/Moongm/LoadComponent }

感谢您的帮助!

【问题讨论】:

    标签: button sprite sfml


    【解决方案1】:

    我不太确定,但 MouseEvent 给出的鼠标坐标可能与窗口无关。

    你可以试试这个:

    buttonEnter.eventMouse(m_window.mapPixelToCoords(sf::Mouse::getPosition(m_window)))
    

    【讨论】:

    • 我认为我的代码(Windows.cpp 和 Button.cpp)很好,所以这是我的全部代码:github.com/Moongm/LoadComponent
    • 在 MouseButtonPressed 事件中打印鼠标位置和按钮位置和大小。也许我们可以这样看问题。
    【解决方案2】:

    我不知道为什么,但我在你的 github 上找不到 window.cpp,这就是为什么我不知道 mapPixelToCoords 是如何工作的,但尝试使用类似的东西:

    Vector2f tempMouse(Mouse::getPosition(m_window));
       if(buttonEnter.eventMouse(tempMouse))
    

    顺便说一句,您的按钮会对按下鼠标上的任何按钮做出反应,因此您应该检查一些重要的事情

    // It does not have to be like this, I just want to show conditions 
        Vector2f tempMouse(Mouse::getPosition(m_window));
        if(someObject.getGlobalBounds().contains(tempMouse) &&
            event.type == Event::MouseButtonReleased &&
            event.key.code == Mouse::Left)
    

    上面给出的解决方案并不完美,但在简单的情况下,我认为它是好的。

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 2021-12-07
      • 2020-07-21
      • 1970-01-01
      • 2017-06-03
      • 2014-03-16
      • 1970-01-01
      • 2013-03-06
      相关资源
      最近更新 更多