Предыдущая Следующая
Пересечение прямоугольников
if (bbMouse.Intersects(bbCursorGame))
{
menu.cursorPositionGame = new Vector2(650, 400); menu.cursorPositionExit = new Vector2(700, 550); cursorState = 1;
}
if (bbMouse.Intersects(bbCursorExit))
{
menu.cursorPositionGame = new Vector2(700, 400); menu.cursorPositionExit = new Vector2(650, 550); cursorState = 2;
}
В исходном коде, определяющем пересечение ограничивающих прямоугольников курсора и табличек, все достаточно просто. Если прямоугольник курсора пересекает прямоугольник таблички с командой Игра, то эта табличка сдвигается влево на 50 пикселей, а переменная cursorState становится равной единице. При этом данная переменная нам необходима только для того, чтобы определить, каким цветом красить активную в текущий момент табличку. Пересечение прямоугольника курсора и второй таблички происходит по той же схеме, что и для первой таблички.
Нажатие пользователем левой кнопки мыши
if(mouseState.LeftButton == ButtonState.Pressed && bbMouse.Intersects(bbCursorGame))
{
this.NewGame(); menuState = false;
}
else if(mouseState.LeftButton == ButtonState.Pressed && bbMouse.Intersects(bbCursorExit))
{
this.Exit();
}
Для определения условия, нажата кнопка мыши или нет, применяется следующая конструкция кода:
mouseState.LeftButton == ButtonState.Pressed
Это стандартная проверка на нажатие пользователем кнопки мыши, и этот механизм определен системно в XNA Framework. Работает все очень просто: если кнопка нажата, то приведенное выше условие равно, а значит, требуется выполнить действия, которые вы определяете для этого условия.
Как видно из исходного кода, переменная cursorState не участвует в обработке состояния нажатой кнопки мыши, как это было сделано в работе с клавиатурой. Вместо этого происходит проверка нажатия кнопки и обязательного пересечения одного из прямоугольников. Если одно из предопределенных условий неверно, то выполнение блока кода за оператором if не происходит.
Если определять нажатие кнопки мыши вкупе с переменной cursorState, то весь механизм будет работать несколько некорректно. Представьте, вы навели курсор мыши на одну из табличек, сделав ее активной, а затем отвели курсор в другую часть экрана. Состояние переменной cursorState в данный момент остается принадлежать этой самой активной табличке, и любое нажатие кнопки мыши в другой части экрана приведет либо к запуску игры, либо к ее закрытию, в зависимости от того, какая из команд была активна... Предыдущая Следующая
|