2

いくつかのコード:

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;
}
4

2 に答える 2

2

理由の 1 つは、これが論理/ブール式であるためです。

ButtonShape.GetShape() == "Rect" && ButtonShape.GetRect().Contains(MousePositions)

この&&ように動作します:

  • 左側の式が偽の場合、右側の式を評価せずに偽と評価します
  • 左の式が真と評価された場合にのみ、2 番目の式が評価されます。
    • ここで、右側の式が false と評価された場合、結果は false になります。
    • それ以外の場合、最終結果は true です。

を削除した後にテストする場合は、 が毎回に設定されていることGetShapeを確認してください。ShapeRect


MousePositionsそれでも毎回機能が実行されない場合は、毎回正しく設定していない可能性があります。これは、関数コードによっては、関数が実行されなかったため表示されます。

于 2013-04-22T01:44:41.257 に答える