XNA зависания - PullRequest
       11

XNA зависания

0 голосов
/ 25 октября 2011

У меня есть кнопка в моей игре.и я хочу сделать так, чтобы оно переключалось на другое изображение кнопки при наведении на него мыши и возвращалось обратно, когда мышь не находится на кнопке.

проблема в том, что когда мышь вышла из области прямоугольника кнопки, это не так.вернуться к первому изображению

мой код так:

    public override void Update(GameTime gameTime)
    {
        base.Update(gameTime);

        MouseState mouseState;
        mouseDiBack = false;
        mouseState = Mouse.GetState();

        if (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle))
        {
            backButton = backButtonHilite;
        }

        if ((mouseState.LeftButton == ButtonState.Pressed) &&
            (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle)))
        {
            mouseDiBack = true;
        }




    }

    public override void Draw(GameTime gameTime)
    {

        spriteBatch.Draw(ScoreBG, ScoreBGRectangle, Color.White);
        spriteBatch.Draw(backButton, backButtonRectangle, Color.White);


        base.Draw(gameTime);

    }
}
}

есть идеи, как мне это сделать ...?

Ответы [ 3 ]

0 голосов
/ 25 октября 2011

Как упоминал Джон, вам нужно вернуть исходную текстуру, когда мышь покинула прямоугольник.

bool mouseOverBackButton = 
    mouseX >= buttonRectangle.Left && mouseX <= buttonRectangle.Right && 
    mouseY >= buttonRectangle.Top && mouseY <= buttonRectangle.Bottom;

backgroundTexture = mouseOverBackButton ? mouseOverTexture: mouseAwayTexture;
mouseDiBack = mouseState.LeftButton == ButtonState.Pressed && mouseOverBackButton;
0 голосов
/ 26 октября 2011

Довольно простое решение, вы не поставили изображение обратно на тот случай, когда мышь не зависает.

       if (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle))
       {
           backButton = backButtonHilite;
       }
       else
       {
          backButton = originalImage; //whatever your Texture2D object may be called
       }

Не ожидайте, что машина узнает, что вы хотите переключиться обратно! Машины тупые! ... Ладно, это потому, что вы переписали значение переменной и не сбросили его.

0 голосов
/ 25 октября 2011

Вы не устанавливаете свою backButton обратно на то, что было, когда мышь выходила из области видимости.Посмотрите на приведенный ниже код и обратите внимание на добавленный оператор ELSE в вашей функции обновления.

 defaultBackButton = backButton;   //Save the default back button somewhere outside your update function

public override void Update(GameTime gameTime)
    {
        base.Update(gameTime);

        MouseState mouseState;
        mouseDiBack = false;
        mouseState = Mouse.GetState();

        if (new Rectangle(mouseState.X, mouseState.Y, 1,1).Intersects(backButtonRectangle))
        {
            backButton = backButtonHilite;
        }
        else 
        {
            backButton = defaultBackButton;
        }


        if ((mouseState.LeftButton == ButtonState.Pressed) && (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle)))
        {
            mouseDiBack = true;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...