Управление скоростью движения объекта

Управление скоростью движения объекта

Рассматривая поведение программы, вам, вероятно, хотелось бы ускорить процесс движения объекта. Чтобы игра была динамичной и увлекательной, нужно постепенно увеличивать сложность игрового процесса для пользователя. Одним из таких способов является ускорение движения. На данный момент кусочек сыра проходит расстояние от одного угла до другого за 5 секунд. Увеличить скорость перемещения картинки очень просто. Достаточно увеличивать значение текущей позиции объекта не на один пиксел, а на несколько. Нужно объявить новые переменные xSpeed и ySpeed, которые будут отвечать за увеличение или уменьшение скорости движения объекта. Соответствующий код приведен в листинге 11.9.

Листинг 11.9

/// <summary>

/// Скорость движения сыра по горизонтали

/// </summary>

private int xSpeed = 1;

/// <summary>

/// Скорость движения сыра по вертикали

/// </summary>

private int ySpeed = 1;

private void updatePositions() {

 if (goingRight) {

  cx += xSpeed;

 } else {

  cx -= xSpeed;

 }

 if ((cx + cheeseImage.Width) >= this.Width) {

  goingRight = false;

 }

 if (cx <= 0) {

  goingRight = true;

 }

 if (goingDown) {

  cy += ySpeed;

 } else {

  cy -= ySpeed;

 }

 if ((cy + cheeseImage.Height) >= this.Height) {

  goingDown = false;

 }

 if (cy <= 0) {

  goingDown = true;

 }

}

Изменяя значения переменных xSpeed и ySpeed, мы можем по своему желанию увеличивать или уменьшать скорость движения кусочка сыра. Для этого надо создать новую функцию, код которой приведен в листинге 11.10.

Листинг 11.10

private void changeSpeed(int change) {

 xSpeed += change;

 ySpeed += change;

}

Теперь можно вызывать этот метод для изменения скорости движения изображения. Для уменьшения скорости надо передавать в функцию отрицательные значения. Чтобы управлять скоростью во время игры, можно использовать клавиши Soft Key, расположенные под экраном.

Следует создать простое меню, содержащее команды Быстрее и Медленнее. Если пользователь нажмет на левую кнопку, то скорость движения сыра будет увеличиваться. При нажатии на правую кнопку скорость уменьшится. Соответствующий код приведен в листинге 11.11.

Листинг 11.11

private void menuItem1_Click(object sender, System.EventArgs e) {

 changeSpeed(1);

}

private void menuItem2_Click(object sender, System.EventArgs e) {

 changeSpeed(-1);

}

В данной ситуации значения в методе changeSpeed не отслеживаются. Это может привести к ситуации, когда пользователь будет постоянно уменьшать скорость и значение скорости может стать отрицательным. В этом случае движение объекта будет совсем не таким, как это планировал разработчик. А при значительном увеличении скорости движение изображения теряет гладкость.