Листинг 11.8
///
/// Направление движения по оси X
///
private bool goingRight = true;
///
/// Направление движения по оси Y
///
private bool goingDown = true;
private void updatePositions() {
if (goingRight) {
cx++;
} else {
cx--;
}
if ((cx + cheeseImage.Width) >= this.Width) {
goingRight = false;
}
if (cx <= 0) {
goingRight = true;
}
if (goingDown) {
cy++;
} else {
cy--;
}
if ((cy + cheeseImage.Height ) >= this.Height) {
goingDown = false;
}
if (cy <= 0) {
goingDown = true;
}
}
Обратите внимание на то, что в коде используются ширина и высота изображения и экрана. Не прописывая жестко величины размеров экрана и изображения, мы можем быть уверенными в том, что программа будет работать корректно в устройствах с любыми разрешением экрана и размерами картинки.
После запуска приложения можно увидеть, что изображение сыра корректно отражается от краев экрана при перемещении.
Управление скоростью движения объекта
Рассматривая поведение программы, вам, вероятно, хотелось бы ускорить процесс движения объекта. Чтобы игра была динамичной и увлекательной, нужно постепенно увеличивать сложность игрового процесса для пользователя. Одним из таких способов является ускорение движения. На данный момент кусочек сыра проходит расстояние от одного угла до другого за 5 секунд. Увеличить скорость перемещения картинки очень просто. Достаточно увеличивать значение текущей позиции объекта не на один пиксел, а на несколько. Нужно объявить новые переменные xSpeed
и ySpeed
, которые будут отвечать за увеличение или уменьшение скорости движения объекта. Соответствующий код приведен в листинге 11.9.
Листинг 11.9
///
/// Скорость движения сыра по горизонтали
///
private int xSpeed = 1;
///
/// Скорость движения сыра по вертикали
///
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
не отслеживаются. Это может привести к ситуации, когда пользователь будет постоянно уменьшать скорость и значение скорости может стать отрицательным. В этом случае движение объекта будет совсем не таким, как это планировал разработчик. А при значительном увеличении скорости движение изображения теряет гладкость.
Итак, в результате наших усилий по экрану движется кусочек сыра. Настало время добавить новый объект, которым пользователь будет отбивать сыр. Для наших целей вполне подойдет батон хлеба. Вспоминаем предыдущие упражнения, где мы выводили кусочек сыра на экран, и повторяем шаги в той же последовательности для батона хлеба.
□ Добавляем графический файл в проект в виде ресурса.
□ Получаем в коде ссылку на файл из сборки
Читать дальше