Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Реализация «движения» по однородному и сложному фону.




Для организации перемещения фигуры по однородному фону можно выделить следующие действия:

  1. Восстановление фона (  заливка области, занимаемой фигурой, цветом фона );
  2. Пересчет координат – сдвиг, поворот и масштабирование на плоскости;
  3. Рисование фигуры с новыми координатами;
  4. Задержка по времени;
  5. Переход по условию на пункт 1.

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

В этом случае последовательность действий будет следующая:

  1. Восстановление части фона из буфера;
  2. Пересчет координат – сдвиг, поворот и масштабирование на плоскости;
  3. Запоминание части фона (под фигурой) в буфере;
  4. Рисование фигуры;
  5. Задержка по времени;
  6. Переход по условию на пункт 1.

Для реализации данной последовательности дей ствий необходимо использовать класс Bitmap.

Напишем функции для сохранения и восстановления части фона.

Сохранение:

Bitmap^ pictureToBitmap(PictureBox^ pBox, Rectangle Section)

{

       Bitmap^ Bmp = gcnew Bitmap(Section.Width, Section.Height);

       Graphics^ Gt = Graphics::FromImage(Bmp);

       Gt->DrawImage(pBox->Image, 0, 0, Section, GraphicsUnit::Pixel);

 

       return Bmp;

}

Восстановление:

void bitmapToPicture(PictureBox^ pBox, Point P, Bitmap^ Bmp)

{

       Graphics^ G = Graphics::FromImage(pBox->Image);

       G->CompositingMode = Drawing2D::CompositingMode::SourceCopy;

       G->DrawImage(Bmp, P);

       pBox->Invalidate();

}

Последовательность действий для организации движения можно реализовать в обработчике события на тик компонента таймер:

System::Void timer_Tick(System::Object^ sender, System::EventArgs^ e)

{

       bitmapToPicture(pBox, Point(X, Y), B);

 

       moveFig(fig, X, Y);

 

       Rectangle Section(X, Y, W, H);

 

       B = pictureToBitmap(pBox, Section);

 

       drawFig(pBox, fig, X, Y);

}

 










Последнее изменение этой страницы: 2018-06-01; просмотров: 227.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...