Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
insrukcii k lr3_ robota z podiyamy.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
883.71 Кб
Скачать

Избирательная очистка буферов

Теперь попробуем применить более сложную перегрузку метода Clear() для избирательной очистки экрана и нарисовать с ее помощью шахматную доску:

public void Clear(Microsoft.Xna.Framework.Graphics.ClearOptions options, Microsoft.Xna.Framework.Graphics.Color

color, float depth, int stencil, Microsoft.Xna.Framework.Rectangle[] regions)

  • options - набор битовых флагов, указывающих, какие буферы необходимо очистить. Для очистки экранного буфера используется флаг Target перечисления ClearOptions. Остальные флаги DepthBuffer и Stencilэтого перечисления используются для очистки соответственно буфера глубины и буфера шаблона, и будут рассмотрены далее

  • color - цвет, которым будет закрашен буфер. Задаeтся с использованием структурыMicrosoft.Xna.Framework.Graphics.Color, являющейся аналогом структуры System.Drawing.Color. Необходимость дублирования обусловлено стремлением разработчиков Microsoft сделать XNA Framework переносимой на другие платформы

  • depth - значение, которым будет заполнен буфер глубины

  • stencil - значение, которым будет заполнен буфер шаблона

  • regions - массив структур Microsoft.Xna.Framework.Rectangle, задающих прямоугольные области экрана, которые должны быть очищены. Области экрана задаются в оконных координатах клиентской области формы - начало координат расположено в ее левом верхнем углу

Для рисования шахматной доски вначале мы очистим экран белым цветом, затем создим массив областей экрана, соответствующих клеткам доски коричневого цвета и ещe раз очистим экран, но уже коричневым цветом.

  • Модифицируйте перекрытый метод OnPaint() следующим образом

protected override void OnPaint(PaintEventArgs e)

{

// Очищаем экран белым цветом

device.Clear(Microsoft.Xna.Framework.Graphics.Color.WhiteSmoke);

// Создаeм массив областей закраски, соответствующих коричневым клеткам

Microsoft.Xna.Framework.Rectangle[] rects = new Microsoft.Xna.Framework.Rectangle[32];

int k = 0; // Счетчик элементов массива

// Перебираем коричневые клетки шахматной доски

for (int j = 0; j < 8; j++) // Строки шахматной доски

for (int i = j % 2; i < 8; i += 2) // Столбцы шахматной доски

{

// Заносим в массив параметры рисования очередной клетки

rects[k] = new Microsoft.Xna.Framework.Rectangle(

i * this.ClientSize.Width / 8, // Отступ по горизонтали

j * this.ClientSize.Height / 8, // Отступ по вертикали

this.ClientSize.Width / 8, // Ширина клетки

this.ClientSize.Height / 8); // Высота клетки

k++; // Увеличиваем счетчик

}

// Закрашиваем все области из массива rects коричневым цветом

device.Clear(ClearOptions.Target, Microsoft.Xna.Framework.

Graphics.Color.Brown, 0.0f, 0, rects);

// Копируем задний буфер на экран

device.Present();

base.OnPaint(e);

}

  • Запустите приложение - на экране появится окно, раскрашенное как шахматная доска

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]