Хлеб — всему голова
Хлеб — всему голова
Наша программа должна уметь перемещать батон хлеба таким образом, чтобы игрок мог отбивать кусок сыра, как будто играя им в теннис. Для этой цели игрок будет использовать клавиши навигации на телефоне. Чтобы управлять батоном хлеба, придется использовать события KeyDown и KeyUp. Событие KeyDown наступает, когда пользователь нажимает на заданную кнопку. Событие KeyUp инициируется при отпускании кнопки.
Необходимо установить флаг, который будет отслеживать нажатия и отпускания клавиш. Когда флаг будет активирован, это будет означать, что пользователь нажал на клавишу, и батон должен двигаться в указанном направлении. Когда пользователь отпустит клавишу, то флаг сбрасывается и объект прекращает движение.
Обработчики событий используют перечисления Keys, показывающие конкретные кнопки навигации. Соответствующий код приведен в листинге 11.15.
Листинг 11.15
/// <summary>
/// Используем keyArgs в качестве флага
/// </summary>
private System.Windows.Forms.KeyEventArgs keyArgs = null;
private void Form1_KeyDown(object sender,
System.Windows.Forms.KeyEventArgs e) {
keyArgs = e;
}
private void Form1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) {
keyArgs = null;
}
Когда программа получает вызов события Form1_KeyDown, флаг keyArgs ссылается на класс KeyEventArgs. При наступлении события Form1_KeyUp флаг keyArgs сбрасывается в null, и код нажатых клавиш игнорируется. Теперь надо переписать метод updatePositions, как показано в листинге 11.16.
Листинг 11.16
private void updatePositions() {
// Код для кусочка сыра остался прежним
...
// Для батона хлеба
if (keyArgs != null) {
switch (keyArgs.KeyCode) {
case Keys.Up:
by-=ySpeed;
break;
case Keys.Down:
by+=ySpeed;
break;
case Keys.Left:
bx-=xSpeed;
break;
case Keys.Right:
bx+=xSpeed;
break;
}
}
}
В данном коде используется оператор switch, который определяет действия программы в зависимости от нажатой клавиши. Батон хлеба движется с той же скоростью, что и кусочек сыра. На этой стадии при запуске программы пользователь может перемещать батон хлеба по всему экрану, в то время как кусочек сыра по-прежнему самостоятельно двигается по экрану.