27.Графика, анимация
Предмет исследований
Графические средства C#.
Средства анимации.
Контрольные вопросы
Анимация.
Принцип создания движения.
Как стирается текущий объект.
Назначение компонентв Timer
От чего зависит скорость движения объекта
Задание. Создать программу демонстрации анимации: движение самолета на неба. Проект – WindowsForm приложение. В программе используются два файла растровых картинок, которые надо загрузить в ту же папку, где находится проект приложения:
фон - sky, файл sky.bmp,
движущийся объект - самолет, файл plane.bmp.
Эти файлы находятся в папке УМД к ЛР.
При анимации осуществляются действия:
В форму загружается фоновая картинка.
В стартовой позиции накладывается самолет.
Через интервал времени, задаваемый встроенным в форму таймером, самолет стирается.
Вычисляется новые координаты.
По ним накладывается самолет в новой позиции.
Пример. Создаем форму приложения.
Она содержит два компонента:
Timer1 – таймер для определения времени, влияющего на скорость полета самолета. Время задается в свойстве таймера Интервал.
Form1 – сама форма для отображения картинки. В ее свойствах задаем text = Полет. В форме будет отображаться фон – небо. В проект включаем файл sky.bmp. В окне свойств формы определим свойство BackgroundImage. Запускаем браузер выьора ресурса, в котором выберем файл sky.bmp из ресурсов проекта.
Скорость полета самолета определяем, как произведение расстояния, пройденного за один интервал таймера, на длительность интервала.
Листинг программы
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Plane
{
public partial class Form1 : Form
{
Bitmap sky = new Bitmap(@"G:\sky.bmp"); // небо
Bitmap plane = new Bitmap(@"G:\plane.bmp"); // самолет
Graphics g; // рабочая графическая поверхность
int dx; // приращение координаты X,определяет скорость полета
Rectangle rct; // область, в которой находится самолет
Boolean demo = true; // true - самолет скрывается в облаках
public Form1()
{
InitializeComponent();
plane.MakeTransparent(); // прозрачный фон у самолета
// задать размер формы в соответствии с размером sky
this.ClientSize = new System.Drawing.Size(
new Point(BackgroundImage.Width,
BackgroundImage.Height));
// будем использовать BackgroundImage формы
g = Graphics.FromImage(BackgroundImage);
// исходное положение самолета
rct.X = -40;
rct.Y = 20;
rct.Width = plane.Width;
rct.Height = plane.Height;
// скорость полета
dx = 2; // скорость полета - 2 пикселя/тик_таймера
timer1.Interval = 20;
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
// стираем самолет копированием фона на рабочую поверхность
g.DrawImage(sky,new Point(0,0));
// изменяем положение самолета
if (rct.X < this.ClientRectangle.Width) rct.X += dx;
else
{
// если граница, задаем заново положение самолета
rct.X = -40;
rct.Y = 20;
}
// рисуем самолет на рабочей поверхности
g.DrawImage(plane, rct.X, rct.Y);
// Метод Invalidate(rct) - перерисовка области rct
if ( ! demo ) this.Invalidate(rct); // обновить область, где самолет
else
{
// если объект вне области rct, он не виден
Rectangle reg = new Rectangle(20,20,sky.Width - 40,
sky.Height - 40);
// показать обновляемую область
g.DrawRectangle(Pens.Black,reg.X ,reg.Y ,
reg.Width-1, reg.Height-1);
this.Invalidate(reg); // обновить область
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
При запуске видим летящий самолет.
- 1.Иср Visual c#. Первые программы
- 1.1.Основы иср
- 2.Численные типы в языке c#
- 3.Строковые и символьные типы в языке c#
- 3.1.Взаимные преобразования
- 3.2.Стандартное форматирование
- 3.3.Нестандартное форматирование
- 4.Тип DateTime в языке c#
- 4.1.Консольное приложение
- 4.2.Windows Forms приложение
- 5.Линейные структуры
- 6.Ветвления
- 6.1.Ветвление if; else
- 6.2.Выбор switch; case
- 7.Циклы с неизвестным числом повторений
- 7.1.Цикл while
- 7.2.Цикл do…while
- 8.Циклы с заданным числом повторений
- 8.1.Команда Goto и метки
- 8.2.Цикл for
- 8.3.Вложенные циклы for
- 8.4.Команда break
- 8.5.Команда continue
- 9.Логические операции
- 10.Массивы
- 10.1.Одномерный массив
- 10.2.Матрица
- 11.Файлы
- 12.Подпрограммы
- 13.Операции со строками
- 13.1.Сравнение строк
- 13.2.Объединение строк
- 13.3.Разбиение строк
- 14.Исключения
- 14.1.Операции с вещественными числами
- 14.2.Операции с целыми числами
- 15.Работы с классами и объектами
- 16.Использование командной строки при запуске программ
- 17.Отладка и тестирование в с#
- 18.Многопоточные приложения
- 19.Работа с папками
- 20.Многооконные приложения
- 21.Компонент ProgressBar
- 22.Списки
- 23.Таблицы
- 24.Графика. Рисуем функции
- 24.1.Текст и график функции в форме
- 24.2.Компонент Chart
- 25.Графика, рисование фигур
- 26.Графика, растровые изображения
- 27.Графика, анимация
- 28.Приложения
- 28.1.Класс System.Math
- 28.2.Класс System.Console
- 28.3.Класс System.String