Лабораторная работа циклы. Поволжский государственный университет телекоммуникаций и информатики
Скачать 3.57 Mb.
|
27. Графика, анимация Предмет исследований Графические средства C#. Средства анимации. Контрольные вопросы Анимация. 1. Принцип создания движения. 2. Как стирается текущий объект. 3. Назначение компонентв Timer 4. От чего зависит скорость движения объекта 5. Задание. Создать программу демонстрации анимации: движение самолета на неба. Проект – WindowsForm приложение. В программе используются два файла растровых картинок, которые надо загрузить в ту же папку, где находит- ся проект приложения: фон - sky, файл sky.bmp, движущийся объект - самолет, файл plane.bmp. Эти файлы находятся в папке УМД к ЛР. При анимации осуществляются действия: В форму загружается фоновая картинка. В стартовой позиции накладывается самолет. Через интервал времени, задаваемый встроенным в форму таймером, самолет стирается. Вычисляется новые координаты. По ним накладывается самолет в новой позиции. Пример. Создаем форму приложения. 149 Она содержит два компонента: Timer1 – таймер для определения времени, влияющего на скорость поле- та самолета. Время задается в свойстве таймера Интервал. Form1 – сама форма для отображения картинки. В ее свойствах задаем text = Полет. В форме будет отображаться фон – небо. В проект включа- ем файл sky.bmp. В окне свойств формы определим свойство BackgroundImage. Запускаем браузер выьора ресурса, в котором выберем файл sky.bmp из ресурсов проекта. Скорость полета самолета определяем, как произведение расстояния, прой- денного за один интервал таймера, на длительность интервала. 150 Листинг программы 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 151 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, 152 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) { } } } При запуске видим летящий самолет. 153 28. Приложения 28.1. Класс System.Math Поля класса Вызов Функция Math.E Значение свойства E примерно равно 2,718. Math.LN10 Значение свойства LN10 примерно равно 2,302. Math.LN2 Значение свойства LN2 примерно равно 0,693. Math.LOG10E Свойство LOG10E (константа) приблизительно равно 0,434. Math.LOG2E Значение свойства LOG2E (константа) приблизитель- но равно 1,442. Math.SQRT1_2 Свойство SQRT1_2 (константа) приблизительно рав- но 0,707. Math.SQRT2 Свойство SQRT2 (константа) приблизительно равно 1,414. Math.PI Свойство PI является константой, приблизительно равной 3,14159. Методы класса. Имена с заглавной буквы. Вызов Функция Abs(x) Абсолютное значение Acos(x) Обратный косинус Asin(x) Обратный синус Atan(x) Обратный тангенс Atan2(x,y) Обратный тангенс. Atan(x/y) BigMul(x,y) Умножает два 32-битовых числа. Ceiling(x) Округление вверх Cos(x) Косинус Cosh(x) Косинус гиперболический DivRem(x,y) Остаток от x/y, числа целые Exp(x) Экспонента = e x Floor(x) Округление вниз IEEERemainder(x,y) Остаток от x/y, числа вещественные Log(x) Натуральный логарифм Log(x,y) Логарифм от x по основанию y Log10(x) Логарифм от x по основанию 10 Max(x,y) Максимальное из двух 154 Min(x,y) Минимальное из двух Pow(x,y) Возводит x в любую степень y Round(x) Округление до ближайшего целого Sign(x) Знак числа Sin(x) Синус Sinh(x) Синус гиперболичгский Sqrt(x) Квадратный корень Tan(x) Тангенс Tanh(x) Тангенс гиперболичгский Truncate(x) Отсечение дробной части 28.2. Класс System.Console Методы класса Вызов Функция Beep() Гудок в консоли Beep(f,t) Гудок в консоли с частотой f в течение t секунд Clear Стирание буфера консоли Read() Чтение символа ReadLine() Чтение строки символов Write(String, O1,…,O4) Вывод в консоль текстового представления объ- ектов Ob (до 4-ех) в формате String WriteLine(String, O1,…,O4) То же самое и перевод строки 28.3. Класс System.String Методы класса Вызов Действие Clone() Возвращает ссылку на экземпляр класса Copy(str) Копирование строки str Concat(strA, strB) Сцепление строки strA со строкой strB Compare(strA, indA, StrB, indB) Сравнивает подстроки строк strA strB в пози- циях indA и indB strA.CompareTo(strB) Сравнивает строку strA со строкой strB Replace(strA, strB) Заменяет строку strA на строку strB Remove(Ind, Count) Удаляет Count знаков после позиции Ind strA.Insert(Ind, strB) Вставляет строку strB в строку strA с позиции ind Equals(strA, strB) Проверка совпадения строк strA и strB 155 ToCharArray(str) Возвращает массив символов строки str str.GetHashCode() Возвращает хэш-код для этой строки str.Length Возвращает число знаков в str str.ToLower() Копия str в нижнем регистре str.ToUpper() Копия str в верхнем регистре |