我尝试用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 }
感谢您的帮助!
答案 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)
上面给出的解决方案并不完美,但在简单的情况下,我认为它很好。