Разработка в Monogame Я создал простой способ обнаружить, что был нажат спрайт. Вот как я проверяю, что спрайт был нажат. mouseOver
означает, что мышь пересекается с спрайтом.onClick называется без нажатия кнопки
var lastMouseState = mouseState;
mouseState = Mouse.GetState();
if (mouseOver && lastMouseState.LeftButton == ButtonState.Pressed && mouseState.LeftButton == ButtonState.Released)
onClick(this);
onclick
управляется в другом классе. Этот класс называется Menu
private void onClick(Button btn)
{
//Toggles the button.
if (btn.HasCheckBox)//Whether the button has a checkbox
{
btn.Checked = !btn.Checked;
}
if (btn.Destination == "inGame")
unPause();
else if (btn.Destination == "Quit")
Exit();
else
openMenu(btn.Destination);
}
Небольшое пояснение здесь: Каждая кнопка имеет свойство назначения, то есть, где кнопка приводит, например, как: InGame, параметры, Quit и т.д.
Теперь здесь моя проблема:
Когда игра приостановлена, отображается меню, содержащее 3 кнопки (продолжение, параметры и выход).
Когда меню открыто и введено подменю, затем нажимается кнопка, после чего меню закрывается, а мышь не перемещается, а затем, когда я снова открываю меню, а мышь находится поверх кнопка Quit
, игра закроется. Проверьте gif ниже для более четкого объяснения.
Это происходит только с Quit
. Когда я пытаюсь выполнить ту же процедуру с другими кнопками, она не работает. {SEE EDIT 2}
Небольшая демонстрация: http://media.giphy.com/media/AxVvk9FgO6TOd5roEo/giphy.gif
я попробовать сначала с помощью кнопки music
. закрыть и открыть меню - ничего не происходит. Я попробую его с кнопкой fullscreen
, нажмите> закрыть> открыть меню повторно - игра завершается.
Почему кнопка нажата зарегистрированной на quit
, но не на options
? Спасибо за помощь. Прокомментируйте, если необходима дополнительная информация.
EDIT Видимо, это не имеет значения, где мышь при входе в меню опций. Пока клик сделан (в любом месте экрана), и после того, как экран меню открывается, мышь наводится над кнопкой, игра прекратится.
Как ни странно, я добавил новую кнопку под Quit
, которая также приводит к меню опций. После тестирования того же поведения со второй кнопкой Option
. Я не смог воспроизвести ошибку. Тем не менее, если я делаю то же самое с первой кнопкой Option
, а во второй раз, он работает так же, как и с Quit
- он мгновенно откроет экран параметров, как если бы он был нажат. Обновлено Gif: http://media.giphy.com/media/AxVvk60pK8NBjmghDa/giphy.gif
EDIT 2 суженного ошибка еще больше. При использовании foreach ошибка появляется только тогда, когда индекс второй кнопки больше, чем первый. Объяснение: Я нажал вторую кнопку, button[1]
и работал только на button[2]
и выше.
Это мой метод обновления:
if (isPaused)
{
foreach (var button in ButtonList)
{
if (MenuScreen == button.Parent)//Menuscreen is the current screen being displayed.
//button.parent is the parent screen that holds current button. such as: ingame, pause, etc.
{
button.Update();
}
}
}
Теперь я знаю, что логика позади него, но не там, где это происходит.
проблема происходит только кнопки, которые имеют индекс выше, чем первая кнопка. В моем случае он работал для кнопки [1] 'на кнопку [2]', но не на кнопку [0] '. И после использования обратного цикла for он работал только с индексами ниже (например, 'button [1]' to 'button [0]' и т. Д.), – Val