Вход/Регистрация
Программирование КПК и смартфонов на .NET Compact Framework
вернуться

Климов Александр Петрович

Шрифт:

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

}

После запуска программы в левом углу экрана будет отображен кусочек сыра (рис. 11.2).

Рис. 11.2. Вывод изображения на экран

Создание анимации

Теперь нужно научиться перемещать объект по экрану. Если это делать достаточно быстро, то у пользователя создается ощущение непрерывного воспроизведения анимации. Для этого следует создать метод

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

Листинг 11.4

/// <summary>

/// Координата X для рисования сыра

/// </summary>

private int cx = 0;

/// <summary>

/// Координата Y для рисования сыра

/// </summary>

private int cy = 0;

private void updatePositions {

 cx++;

 cy++;

}

Переменные

cx
и
cy
содержат текущие координаты кусочка сыра. Меняя значения этих координат, можно управлять расположением изображения на экране. Теперь нужно переписать код для события
Form1_Paint
, как это показано в листинге 11.5.

Листинг 11.5

private void Form1_Paint(object sender,

 System.Windows.Forms.PaintEventArgs e) {

 // Текущая позиция сыра

 e.Graphics.DrawImage(cheeseImage, cx, cy);

}

Теперь при каждом вызове метода

Paint
программа перерисовывает изображение сыра в указанном месте. Но программа должна самостоятельно перемещать изображение через определенные промежутки времени. Также нужно иметь возможность управлять скоростью перемещения картинки. Для этой задачи подойдет объект
Timer
. Соответствующий элемент нужно добавить на форму.

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

Но вернемся к настройкам таймера. Интервал срабатывания таймера должен составлять 50 миллисекунд, а свойство

Enabled
должно получить значение
False
. Когда таймер будет включен, код в методе
Tick
будет срабатывать 20 раз в секунду. При создании таймера нельзя для свойства
Enable
устанавливать значение True, так как метод
timer1_Tick
попытается отобразить изображения до того, как они будут загружены. Включать таймер можно только тогда, когда все необходимые картинки будут загружены, иначе программа выдаст сообщение об ошибке. В нашем примере таймер активируется в конструкторе формы после загрузки изображения сыра, как это показано в листинге 11.6.

Листинг 11.6

public Form1 {

 //

 // Required for Windows Form Designer support.

 //

 InitializeComponent;

 // Получим ссылку на сборку

 System.Reflection.Assembly execAssem =

System.Reflection.Assembly.GetExecutingAssemblу;

 // Получим доступ к картинке с сыром

 cheeseImage = new System.Drawing.Bitmap

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

 // Включаем таймер

 this.timer1.Enabled = true;

}

Теперь при запуске программы конструктор загружает картинку и включает таймер.

Настало время создать код для события

Tick
. Система перерисовывает содержимое экрана только при определенных условиях. Мы можем заставить систему перерисовать экран при каждом изменении местоположения картинки с помощью метода
Invalidate
. Таким образом, через определенные промежутки времени приложение меняет координаты изображения и обновляет экран, чтобы пользователь увидел картинку на новом месте. Соответствующий код приведен в листинге 11.7.

Листинг 11.7

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

 updatePositions;

 Invalidate;

}

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

  • Читать дальше
  • 1
  • ...
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: