Книга: Программирование КПК и смартфонов на .NET Compact Framework
Улучшение графики
Разделы на этой странице:
Улучшение графики
На данный момент игра достаточно увлекательна, но графика оставляет желать лучшего. Когда объекты проходят друг через друга, можно увидеть ограничивающие прямоугольники объекта. Надо исправить эту ситуацию.
Для решения проблемы можно использовать прозрачность. Принцип работы с прозрачностью очень прост. Надо выбрать один или несколько цветов, после чего остается указать, что они объявляются прозрачными. В этом случае прозрачные пикселы не участвуют в отображении картинок.
Когда картинка рисуется без прозрачных цветов, она просто копируется в память. Применение прозрачных цветов заставляет машину проверять каждый пиксел для перерисовки, что увеличивает нагрузку на процессор. В полной версии библиотеки .NET Framework разработчик может несколько цветов делать прозрачными. В библиотеке .NET Compact Framework это можно сделать с одним цветом.
Использование прозрачности реализуется при помощи класса ImageAttributes
пространства имен System.Drawing
. Нужно создать новую переменную transparentWhite
, так как белый цвет в изображениях будет считаться прозрачным. Экземпляр класса создается при старте программы, как показано в листинге 11.65.
Листинг 11.65
/// <summary>
/// Маска для белого цвета, который будет считаться прозрачным
/// </summary>
private System.Drawing.Imaging.ImageAttributes transparentWhite;
// Задаем белую маску.
transparentWhite = new System.Drawing.Imaging.ImageAttributes();
transparentWhite.SetColorKey(Color.White, Color.White);
Напомню, что в .NET Framework метод SetColorKey
принимает ряд цветов, а в .NET Compact Framework один и тот же цвет дается дважды. Этот цвет будет прозрачным для всех картинок, отображаемых с помощью класса ImageAttribute
. Если в игре понадобятся белые цвета, то они не должны быть совершенно белыми.
Объекты игры были созданы так, чтобы их фон был абсолютно белым. Значения атрибутов, используемых при рисовании кусочка сыра, реализованы так, как показано в листинге 11.66. Для других объектов код будет абсолютно таким же.
Листинг 11.66
// Выводим на экран кусочек сыра
g.DrawImage(
cheeseImage, // Image
cheeseRectangle, // Dest.rect
0, // srcX
0, // srcY
cheeseRectangle.Width, // srcWidth
cheeseRectangle.Height, // srcHeight
GraphicsUnit.Pixel, // srcUnit
transparentWhite); // ImageAttributes
В ранней версии игры вызывалась другая версия метода DrawImage. Теперь же задается прямоугольник и указывается прозрачный цвет. Чтобы прозрачность работала должным образом, сыр должен рисоваться на экране после отображения батона.
Итак, мы рисуем прозрачные области для батона, куска сыра и ветчины. Мы обошли вниманием помидоры, которые пока не перекрываются. Этот недостаток будет исправлен чуть позже. В качестве украшения надо добавить фоновую картинку в виде красочной скатерти (рис. 11.8).
Рис. 11.8. Фон для игры
Картинка должна иметь размер клиентской части экрана с белым пространством в верхней части для ведения счета.
Добавить фон не так уж и трудно. Вместо заливки экрана белым цветом в каждом кадре надо просто отрисовать этот узор. Следует объявить новую переменную backgroundImage
для картинки-фона, загрузить изображение из ресурсов и изменить код в методе Form1_Paint
, как показано в листинге 11.67.
Листинг 11.67
/// <summary>
/// Изображение, содержащее фон игры.
/// </summary>
private Image backgroundImage = null;
// Получим изображение фона игры
backgroundImage = new System.Drawing.Bitmap(
execAssem.GetManifestResourceStream(@"Bouncer.tablecloth.gif"));
g.DrawImage(backgroundImage, 0, 0);
Код загружает картинку как ресурс. Программа теперь может использовать прозрачность для отображения томатов.
Программа неплохо работает в эмуляторе, но не очень хорошо на настоящем КПК, так как процесс рисования все еще имеет некоторые недочеты. Для их устранения следует применять спрайты.
- Начало работы
- Добавление изображения в программу
- Использование встроенных ресурсов
- Вывод картинки на экран
- Создание анимации
- Отражения
- Управление скоростью движения объекта
- Добавляем новый объект
- Устранение мерцания
- Хлеб — всему голова
- Обнаружение столкновений
- Столкновения батона и мяча
- Новые объекты
- Размещение помидоров
- Уничтожение томатов
- Счет игры
- Ведение счета
- Звуковые эффекты
- Дальнейшие улучшения
- И опять добавляем новые объекты
- Управление таблицей результатов
- Переключение между формами
- Отображение дочернего окна
- Получение имени игрока
- Хранение лучших результатов
- Улучшение графики
- Спрайты
- Письма с элементами графики и вложениями
- Урок 6.6. Диаграммы и графики
- Классы для программирования графики
- Распределение графики по слоям
- Два вида статичной графики
- Улучшение селективности индекса
- Создание тени у рисуемой графики
- Глава 5. Редактор растровой графики «ГИМП»
- print - Вывод на печать кадров фильма или клипа с использованием векторной графики
- Графики отпусков сотрудников предприятия
- Улучшение программ и услуг
- Разбиение растровой графики Модификатор Magic Wand ("Волшебная палочка")