Приставки
Nintendo (Dendy)
Nintendo 64
Sega Genesis
Sega CD / 32x
Master System
Super Nintendo
Turbo Grafx 16
Sega Saturn
Sony PlayStation
GameBoy Advance
GameBoy / Color
Game Gear
Atari
Другие

Утилиты
Системные утилиты
GoodXXXX
Sega CD / 32x
Nintendo 64
Переводы, хакинг
Музыка

Мир приставочных игр

Версия 2.00a

Leonis © 2002-2009
Команда Новости Помощь Ссылки
ПОМОЩЬ
Литература про игры
Предыдущая Следующая

Пересечение прямоугольников

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 в данный момент остается принадлежать этой самой активной табличке, и любое нажатие кнопки мыши в другой части экрана приведет либо к запуску игры, либо к ее закрытию, в зависимости от того, какая из команд была активна...


Предыдущая Следующая

Горяченькое

Друзья

Hosted by uCoz