【发布时间】:2016-08-03 04:24:24
【问题描述】:
在我的按钮类下,我有一个检查鼠标是否在按钮范围内的函数:
bool Button::isMouseOver(int mousePosX, int mousePosY) {
if (button.getPosition().x < mousePosX &&
button.getPosition().x + button.getSize().x > mousePosX &&
button.getPosition().y < mousePosY &&
button.getPosition().y + button.getSize().y > mousePosY) {
return true;
}
return false;
}
然后在我的主 cpp 文件下,我有这个用于激活功能的逻辑:
int mousePosX = sf::Mouse::getPosition().x;
int mousePosY = sf::Mouse::getPosition().y;
switch (Event.type) {
case sf::Event::Closed:
window.close();
case sf::Event::MouseButtonPressed:
if (btnPlay.isMouseOver(mousePosX, mousePosY)) {
std::cout << "True\n";
}
}
但由于某种原因,什么都没有发生。而且我知道这是可行的,因为我在其他游戏中的代码完全相同,而且运行良好。
【问题讨论】:
-
您为什么不对每个案例使用
break语句? -
你可能应该得到鼠标相对于窗口的位置,而不是桌面。
sf::Mouse::getPosition(window); -
并使用
mapPixelToCoords:sfml-dev.org/tutorials/2.3/… -
要调试它并验证之前评论者的 cmets 是否正确,请在您的
isMouseOver中添加所有坐标的std::cout,这样您就可以检查实际发生的情况。