#button #xna
#кнопка #xna
Вопрос:
У меня есть кнопка в моей игре. и я хочу, чтобы она менялась на другое изображение кнопки при наведении на нее курсора мыши и обратно, когда мышь не находится на кнопке.
проблема в том, что когда мышь выходит из области прямоугольника кнопки, она не возвращается к первому изображению
мой код выглядит так :
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) amp;amp;
(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);
}
}
}
есть идеи, как мне это сделать …?
Ответ №1:
Довольно простое решение: вы не вернули изображение обратно в случае, когда мышь не наведена.
if (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle))
{
backButton = backButtonHilite;
}
else
{
backButton = originalImage; //whatever your Texture2D object may be called
}
Не ожидайте, что машина узнает, что вы хотите переключиться обратно! Машины глупы! ..Хорошо, это на самом деле потому, что вы переписали значение переменной и не сбросили его.
Ответ №2:
Вы не возвращаете 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) amp;amp; (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle)))
{
mouseDiBack = true;
}
}
Ответ №3:
Как упоминал Джон, вам нужно вернуть исходную текстуру, когда мышь покинет прямоугольник.
bool mouseOverBackButton =
mouseX >= buttonRectangle.Left amp;amp; mouseX <= buttonRectangle.Right amp;amp;
mouseY >= buttonRectangle.Top amp;amp; mouseY <= buttonRectangle.Bottom;
backgroundTexture = mouseOverBackButton ? mouseOverTexture: mouseAwayTexture;
mouseDiBack = mouseState.LeftButton == ButtonState.Pressed amp;amp; mouseOverBackButton;