My-library.info
Все категории

Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework. Жанр: Программирование издательство -, год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
Программирование КПК и смартфонов на .NET Compact Framework
Издательство:
-
ISBN:
-
Год:
-
Дата добавления:
17 сентябрь 2019
Количество просмотров:
208
Читать онлайн
Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework

Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework краткое содержание

Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework - описание и краткое содержание, автор Александр Климов, читайте бесплатно онлайн на сайте электронной библиотеки My-Library.Info
Мобильные устройства все активнее вторгаются в нашу жизнь. Карманные компьютеры и смартфоны давно утратили статус дорогих игрушек и перекочевали в разряд необходимых устройств. Значит, для них необходимо создавать программное обеспечение. Так почему вы должны оставаться в стороне?Прочитав эту книгу, вы получите знания, которые позволят вам уверенно создавать программы для карманных компьютеров и смартфонов. А огромное количество разнообразных примеров поможет быстро совершенствоваться и развиваться, обогащая свой опыт работы.Книга предназначена для начинающих программистов.

Программирование КПК и смартфонов на .NET Compact Framework читать онлайн бесплатно

Программирование КПК и смартфонов на .NET Compact Framework - читать книгу онлайн бесплатно, автор Александр Климов

После запуска приложения можно увидеть, что изображение сыра корректно отражается от краев экрана при перемещении.

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

Рассматривая поведение программы, вам, вероятно, хотелось бы ускорить процесс движения объекта. Чтобы игра была динамичной и увлекательной, нужно постепенно увеличивать сложность игрового процесса для пользователя. Одним из таких способов является ускорение движения. На данный момент кусочек сыра проходит расстояние от одного угла до другого за 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 не отслеживаются. Это может привести к ситуации, когда пользователь будет постоянно уменьшать скорость и значение скорости может стать отрицательным. В этом случае движение объекта будет совсем не таким, как это планировал разработчик. А при значительном увеличении скорости движение изображения теряет гладкость.

Добавляем новый объект

Итак, в результате наших усилий по экрану движется кусочек сыра. Настало время добавить новый объект, которым пользователь будет отбивать сыр. Для наших целей вполне подойдет батон хлеба. Вспоминаем предыдущие упражнения, где мы выводили кусочек сыра на экран, и повторяем шаги в той же последовательности для батона хлеба.

□ Добавляем графический файл в проект в виде ресурса.

□ Получаем в коде ссылку на файл из сборки

□ Объявляем две переменные, содержащие координаты батона хлеба.

Соответствующий код приведен в листинге 11.12.

Листинг 11.12

/// <summary>

/// Изображение, содержащее батон хлеба

/// </summary>

private Image breadImage = null;


// Получаем изображение батона хлеба

breadImage = new System.Drawing.Bitmap(

 execAssem.GetManifestResourceStream(@"Bouncer.bread.gif"));


/// <summary>

/// Координата X для батона хлеба

/// </summary>

private int bx = 0;


/// <summary>

/// Координата Y для батона хлеба

/// </summary>

private int by = 0;

На рис. 11.3 показан внешний вид программы на этом этапе.

Рис. 11.3. Изображения хлеба и сыра

Устранение мерцания

Несмотря на то что мы проделали уже очень большую работу, наша программа по-прежнему не лишена недостатков. При запуске программы изображения постоянно мерцают, раздражая пользователя. Это связано с перерисовкой экрана через заданные интервалы времени. Каждые 50 миллисекунд экран закрашивается белым фоном, а затем на экран выводятся два объекта. Если не устранить этот недостаток, то никто не захочет играть в игру.

Решение проблемы лежит в использовании специальной техники, называемой двойной буферизацией. Двойная буферизация обеспечивает плавную смену кадров. Технология позволяет рисовать необходимые изображения в специальном буфере, который находится в памяти компьютера. Когда все необходимые изображения будут выведены в буфере, то готовое окончательное изображение копируется на экран. Процесс копирования идет очень быстро, и эффект мерцания пропадет. Для реализации этой идеи надо создать новый объект Bitmap. Именно на нем будут отображаться все рисунки, а потом останется только скопировать объект в нужную позицию. Также потребуется переписать метод Form1_Paint, как показано в листинге 11.13.

Листинг 11.13

/// <summary>

/// картинка-буфер

/// </summary>

private Bitmap backBuffer = null;


private void Form1_Paint(object sender,

 System.Windows.Forms.PaintEventArgs e) {

 // Создаем новый буфер

 if (backBuffer == null) {

  backBuffer = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);

 }

 using (Graphics g = Graphics.FromImage(backBuffer)) {

  g.Clear(Color.White);

  g.DrawImage(breadImage, bx, by);

  g.DrawImage(cheeseImage, cx, cy);

 }

 e.Graphics.DrawImage(backBuffer, 0, 0);

}

При первом вызове метода Form1_Paint создается буфер для приема изображений, который объявлен как переменная backBuffer. Затем данный буфер использует контекст устройства для вывода изображений. И, наконец, метод DrawImage из графического контекста формы копирует изображение из буфера и выводит его на экран.

После запуска программы станет понятно, что окончательно избавиться от мерцания не удалось. Хотя улучшения есть, тем не менее, небольшое мерцание объектов все же осталось. Это связано с особенностью перерисовки на уровне системы. Когда Windows рисует объекты на экране, она сначала заполняет его цветом фона. Затем при наступлении события Paint система рисует игровые элементы поверх фона. Поэтому, несмотря на наши ухищрения, мы по-прежнему видим неприятный эффект мерцания.

Нужно сделать так, чтобы система Windows не перерисовывала экран. Для этого следует переопределить метод OnPaintBackground, отвечающий за перерисовку экрана, причем новая версия метода вообще ничего не будет делать, что иллюстрирует листинг 11.14.

Листинг 11.14

protected override void OnPaintBackground(PaintEventArgs pevent) {

 // He разрешаем перерисовывать фон

}

После добавления этого метода в программу мерцание исчезнет. Кусочек сыра теперь движется без всякого мерцания.

Но теперь появилась другая проблема. Когда кусочек сыра проходит через батон хлеба, то виден прямоугольник, обрамляющий изображение сыра. Кроме того, по условиям игры, сыр не может проходить через батон, а должен при столкновении изменить свое направление и двигаться в другую сторону. Именно этой проблемой и нужно заняться сейчас.

Хлеб — всему голова

Наша программа должна уметь перемещать батон хлеба таким образом, чтобы игрок мог отбивать кусок сыра, как будто играя им в теннис. Для этой цели игрок будет использовать клавиши навигации на телефоне. Чтобы управлять батоном хлеба, придется использовать события KeyDown и KeyUp. Событие KeyDown наступает, когда пользователь нажимает на заданную кнопку. Событие KeyUp инициируется при отпускании кнопки.

Необходимо установить флаг, который будет отслеживать нажатия и отпускания клавиш. Когда флаг будет активирован, это будет означать, что пользователь нажал на клавишу, и батон должен двигаться в указанном направлении. Когда пользователь отпустит клавишу, то флаг сбрасывается и объект прекращает движение.


Александр Климов читать все книги автора по порядку

Александр Климов - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки My-Library.Info.


Программирование КПК и смартфонов на .NET Compact Framework отзывы

Отзывы читателей о книге Программирование КПК и смартфонов на .NET Compact Framework, автор: Александр Климов. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.