Для объекта таймер устанавливается интервал срабатывания

public partial class Form1: Form

{

int k = 0;

Graphics displayGraphics;

Pen p;

SolidBrush b, b1;

public Form1()

{

InitializeComponent();

displayGraphics = Graphics.FromHwnd(this.Handle);

timer1.Enabled = true;

p = new Pen(Color.Red);

b = new SolidBrush(Color.Yellow);

b1 = new SolidBrush(Color.Green);

}

 

private void timer1_Tick(object sender, EventArgs e)

{

//создаем объект - изображение, которое будет включать все, что нарисовано на форме

Image i = new Bitmap(this.Height, this.Width);

Graphics g = Graphics.FromImage(i);

g.Clear(Color.Aqua);

g.FillEllipse(b, k, 150, 30, 45);

g.FillEllipse(b1, k + 5, 165, 5, 5);

g.FillEllipse(b1, k + 20, 165, 5, 5);

g.DrawArc(p, k + 5, 175, 20, 10, 0, 180);

g.FillRectangle(b1, 0, 190, 500, 100);

k = k + 10;

displayGraphics.DrawImage(i, new Point(0, 0));

}

}

Двойную буферизацию можно реализовать на основе классов BufferedGraphics и BufferedGraphicsContext. Класс BufferedGraphicsContext предоставляет методы для использования двойной буферизации, подготавливает память для второго буфера и ассоциирует этот буфер с «холстом» (Graphics) элемента управления по умолчанию.

Класс BufferedGraphics – это «оболочка» самого буфера, имеет основной метод для работы двойной буферизации – Render() с вариантами перегрузки.

Render() без параметров визуализирует второй буфер на буфер элемента управления по умолчанию. В программе используется вариант метода, при котором передается параметр – «холст», на который необходимо выполнить «проецирование» внутреннего буфера. Метод позволяет наиболее быстро производить отображение буфера на «холст» элемента управления, что позволяет избежать мерцаний.

private BufferedGraphicsContext context;

private BufferedGraphics grafx;

private Graphics pgrafx;

Здесь переменная pgrafx – экранный буфер панели panel1, т.е. на этот буфер должно «проецироваться» готовое изображение.

Переменная context – объект класса BufferedGraphicsContext, имеет необходимый метод Allocate выделения памяти для второго буфера по размеру и формату pgrafx и panel2.

Переменная grafx – ссылка на объект BufferedGraphics, который создается при вызове метода Allocate.

 

pgrafx = panel1.CreateGraphics();

context = new BufferedGraphicsContext();

grafx = context.Allocate(pgrafx, new Rectangle(0, 0, panel2.Width, panel2.Height));

….

 

перенос готового кадра из второго буфера непосредственно в буфер элемента управления (panel1), который будет выведен на экран:

grafx.Render(pgrafx);

 

Задания к лабораторной работе

 

1. Разобрать предложенные фрагменты программ.

2. Выполнить задание преподавателя. Нарисовать рисунок, используя графические примитивы, раскрасить и выполнить анимацию (можно для изображения загрузить готовую картинку). Использовать двойную буферизацию.

3. Запуск и останов анимации выполнять по заданным клавишам.

 

1) Нарисовать домик. Из трубы идет дым. По нажатию на заданную клавишу реализовать анимацию.

2) Нарисовать машинку, двигающуюся по дороге. Движение и останов машинки реализовать по нажатию на клавиши клавиатуры.

3) Нарисовать небо и движущиеся облака и солнце. Если облако закрывает солнце, идет дождь. Движение запускается и останавливается по щелчку мыши.

4) Нарисовать летающий в пространстве мяч. Движение и останов реализовать по нажатию на клавиши клавиатуры.

5) Нарисовать замкнутый прямоугольник, внутри которого двигается мячик и отталкивается от стенок прямоугольника. Начало и конец движения по щелчку мыши.

6) Реализовать фрагмент игры в «Настольный теннис». Ракетка двигается и отбивает летящий шарик. Движение ракетки по нажатию клавиш управлением курсора.

7) Нарисовать рисунок запуск ракеты. Движение начинать по щелчку мыши.

8) Нарисовать рисунок – закипание жидкости в стакане. Температура увеличивается по нажатию клавиш управлением курсора.

9) Нарисовать рисунок движение змейки по экрану. Направление движения задается нажатием на заданные клавиши клавиатуры.

10) Нарисовать летающий в пространстве куб. Движение и останов реализовать по нажатию на клавиши клавиатуры.

Вопросы к защите лабораторной работы

 

1. Как вывести изображение в форму?

2. Класс Graphics и его методы.

3. Как создать объект Graphics без события Paint?

4. Как вывести изображение?

5. Методы для настройки параметров изображения?

6. Как проверить условие попадания курсора мыши в прямоугольную область, непрямоугольную область?

7. Как организовать перетаскивание мышью графического объекта по форме?

8. Как создать объект PictureBox?

9. Для чего используют двойную буферизацию?

10. Методы, используемые при двойной буферизации. Как вывести изображение, как создать изображение?

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: