Книга: Программирование КПК и смартфонов на .NET Compact Framework
Создание анимации
Разделы на этой странице:
Создание анимации
Теперь нужно научиться перемещать объект по экрану. Если это делать достаточно быстро, то у пользователя создается ощущение непрерывного воспроизведения анимации. Для этого следует создать метод 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();
}
После запуска программы кусочек сыра по диагонали переместится в правый нижний угол экрана. Когда изображение достигнет края экрана, оно продолжит свое движение и скроется. При движении изображение сыра немного мерцает, что очень раздражает всех пользователей. В дальнейшем этот недостаток будет исправлен.
- Начало работы
- Добавление изображения в программу
- Использование встроенных ресурсов
- Вывод картинки на экран
- Создание анимации
- Отражения
- Управление скоростью движения объекта
- Добавляем новый объект
- Устранение мерцания
- Хлеб — всему голова
- Обнаружение столкновений
- Столкновения батона и мяча
- Новые объекты
- Размещение помидоров
- Уничтожение томатов
- Счет игры
- Ведение счета
- Звуковые эффекты
- Дальнейшие улучшения
- И опять добавляем новые объекты
- Управление таблицей результатов
- Переключение между формами
- Отображение дочернего окна
- Получение имени игрока
- Хранение лучших результатов
- Улучшение графики
- Спрайты
- Возможно ли создание анимации текста в Microsoft Word?
- Правка анимации
- Два вида трансформационной анимации
- Создание пользовательских элементов управления Windows Forms
- Создание пользовательского интерфейса режима проектирования
- Now, strip — создание киноленты из анимации
- Создание кадров анимации
- Создание многослойной анимации
- Создание составной анимации
- Глава 13 Создание составной анимации
- Создание покадровой анимации