SFML mouseButtonPressed在Sprite上

时间:2016-08-29 22:20:15

标签: button sprite sfml

我尝试用SFML做一个Button,但是当我点击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时): MouseButtonPressed! eventMouse 你没有按下按钮

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

你可以试试这个:

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

答案 1 :(得分:0)

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

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

BTW你的按钮会对鼠标上的任何按钮做出反应,所以你应该检查一些重要的事情

// 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)

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