一些代码:
Menu.Handle_MouseOvers(MousePosition); //Runs function below
void Handle_MouseOvers(Vector2<int> &MousePositions) ///Runs function below
{
if (MenuButtons.size() > 0)
MenuButtons[0].CheckContains(MousePositions);
}
void CheckContains(Vector2<int> &MousePositions)
{
if (ButtonShape.GetShape() == "Rect" && ButtonShape.GetRect().Contains(MousePositions)) ///This doesn't run sometimes
{
MouseOver = true;
std::cout << "MouseOver is true" << std::endl;
}
else{
std::cout << "mouseOver is false" << std::endl;
MouseOver = false;
}
}
由于某种原因,ButtonShape.GetRect()。Contains(MousePositions)仅在大约80%的时间内运行。我在函数中放置了一些couts,当它失败时,它根本不运行该函数。我无法弄清楚为什么它会在大多数时间工作大声笑。有没有人有任何想法?任何帮助将不胜感激。
将其添加为编辑;
bool Contains(Vector2<int> &MousePosition)
{
std::cout << MousePosition.x << " " << MousePosition.y << std::endl;
if (MousePosition.x >= x && MousePosition.x <= x + Width && MousePosition.y >= y && MousePosition.y <= y + Height)
return true;
else
return false;
}
答案 0 :(得分:2)
一个原因可能是因为这是一个逻辑/布尔表达式:
ButtonShape.GetShape() == "Rect" && ButtonShape.GetRect().Contains(MousePositions)
&&
以这种方式运作:
如果您在删除GetShape
后进行测试,请确保每次Shape
都设置为Rect
。
如果该功能每次仍未运行,则可能是您每次都可能无法正确设置MousePositions
。根据您的功能代码,这将显示为未运行的功能。
答案 1 :(得分:1)
如果ButtonShape.GetShape()!=“Rect”,那么第二个表达式(包含对ButtonShape.GetRect()。Contains(MousePositions)的调用)将不会被调用,因为它不需要满足整个表达 - 这称为“短路”。