Устранение мерцания
Устранение мерцания
Несмотря на то что мы проделали уже очень большую работу, наша программа по-прежнему не лишена недостатков. При запуске программы изображения постоянно мерцают, раздражая пользователя. Это связано с перерисовкой экрана через заданные интервалы времени. Каждые 50 миллисекунд экран закрашивается белым фоном, а затем на экран выводятся два объекта. Если не устранить этот недостаток, то никто не захочет играть в игру.
Решение проблемы лежит в использовании специальной техники, называемой двойной буферизацией. Двойная буферизация обеспечивает плавную смену кадров. Технология позволяет рисовать необходимые изображения в специальном буфере, который находится в памяти компьютера. Когда все необходимые изображения будут выведены в буфере, то готовое окончательное изображение копируется на экран. Процесс копирования идет очень быстро, и эффект мерцания пропадет. Для реализации этой идеи надо создать новый объект Bitmap. Именно на нем будут отображаться все рисунки, а потом останется только скопировать объект в нужную позицию. Также потребуется переписать метод Form1_Paint, как показано в листинге 11.13.
Листинг 11.13
/// <summary>
/// картинка-буфер
/// </summary>
private Bitmap backBuffer = null;
private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e) {
// Создаем новый буфер
if (backBuffer == null) {
backBuffer = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
}
using (Graphics g = Graphics.FromImage(backBuffer)) {
g.Clear(Color.White);
g.DrawImage(breadImage, bx, by);
g.DrawImage(cheeseImage, cx, cy);
}
e.Graphics.DrawImage(backBuffer, 0, 0);
}
При первом вызове метода Form1_Paint создается буфер для приема изображений, который объявлен как переменная backBuffer. Затем данный буфер использует контекст устройства для вывода изображений. И, наконец, метод DrawImage из графического контекста формы копирует изображение из буфера и выводит его на экран.
После запуска программы станет понятно, что окончательно избавиться от мерцания не удалось. Хотя улучшения есть, тем не менее, небольшое мерцание объектов все же осталось. Это связано с особенностью перерисовки на уровне системы. Когда Windows рисует объекты на экране, она сначала заполняет его цветом фона. Затем при наступлении события Paint система рисует игровые элементы поверх фона. Поэтому, несмотря на наши ухищрения, мы по-прежнему видим неприятный эффект мерцания.
Нужно сделать так, чтобы система Windows не перерисовывала экран. Для этого следует переопределить метод OnPaintBackground, отвечающий за перерисовку экрана, причем новая версия метода вообще ничего не будет делать, что иллюстрирует листинг 11.14.
Листинг 11.14
protected override void OnPaintBackground(PaintEventArgs pevent) {
// He разрешаем перерисовывать фон
}
После добавления этого метода в программу мерцание исчезнет. Кусочек сыра теперь движется без всякого мерцания.
Но теперь появилась другая проблема. Когда кусочек сыра проходит через батон хлеба, то виден прямоугольник, обрамляющий изображение сыра. Кроме того, по условиям игры, сыр не может проходить через батон, а должен при столкновении изменить свое направление и двигаться в другую сторону. Именно этой проблемой и нужно заняться сейчас.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Устранение затора
Устранение затора Переполнение, или затор, может возникнуть в сети по многим причинам. Например, если данные поступают к шлюзу по высокоскоростному каналу и должны быть переданы в низкоскоростной канал. Или данные нескольких каналов мультиплексируются в один канал,
Устранение неполадок
Устранение неполадок С помощью данного механизма можно решать и устранять практически любые неполадки и сбои в работе аппаратных или программных средств, которые установлены и используются на компьютере. При этом все сбои и неполадки разделены на пять категорий:?
Устранение негатива
Устранение негатива Личное общение, как известно, устраняет негатив. Однако социальные сети дают возможность безнаказанно говорить все, что думаешь И очень часто в таких соцсетях люди выплескивают весь накопившийся негатив Запомните: если хорошее о вас могут написать в
Устранение чересстрочной развертки
Устранение чересстрочной развертки Иногда приходится обрабатывать изображения, захваченные из видеофильма, ролика или мультфильма. Особенность кадра видео в том, что за один кадр передаются не все строки, из которых состоит изображение, а только четные или нечетные (это
Устранение артефактов с фотографии
Устранение артефактов с фотографии Главный недостаток классического способа фотографии – недолговечность. Со временем даже совершенно безупречный по качеству изображения снимок (или негатив) теряет насыщенность цветовой гаммы, покрывается царапинами и содержит
Red Eye Remover (Устранение красных глаз)
Red Eye Remover (Устранение красных глаз) Red Eye Remover (Устранение красных глаз) – это не плагин для Photoshop, а самостоятельная программа. Тем не менее, мы решили включить его описание в эту книгу. Плагин подобного плана был уже описан выше, и мы позволили себе отойти от
R.8.1.1 Устранение неоднозначности
R.8.1.1 Устранение неоднозначности Неоднозначность, отмеченная в §R.6.8, которая возникает из-за сходства между приведением, заданным в функциональном стиле, и описанием, может также появиться в контексте описания. В этом контексте она проявляется как сходство между
Глава 24 Различные проблемы и их устранение
Глава 24 Различные проблемы и их устранение 24.1. Проблемы с загрузкой системы Проблемы с загрузкой системы могут быть связаны либо с неправильной конфигурацией загрузчика GRUB2, либо с самим ядром системы, когда при загрузке ядро зависает и/или переходит в режим паники.Если
Анимация без мерцания
Анимация без мерцания Данная программа иллюстрирует применение процедур LockDrawing и Redraw для реализации анимации без мерцания:uses GraphABC;beginLockDrawing;for var i:=1 to 500 dobeginWindow.Clear;Brush.Color := clGreen;Ellipse(i,100,i+100,200);Redraw;Sleep(1);end;end.Основная идея состоит в следующем: отключим рисование на экране,
17.11. Устранение JPEG-дефектов
17.11. Устранение JPEG-дефектов Начиная с момента появления первых графических форматов программисты ищут способ, как записать в файл максимальное количество информации об изображении при минимально возможном размере файла. В качестве решения данной проблемы применяются
Устранение традиционной путаницы
Устранение традиционной путаницы Класс - это модель, а объект - экземпляр такой модели. Эта особенность настолько очевидна, что обычно не требует дополнительных комментариев. Тем не менее, в определенной категории специальной литературы имеет место весьма небрежное
Устранение возможных проблем
Устранение возможных проблем Напомним еще раз, что самый простой и надежный способ успешного подключения телефона к компьютеру – точное следование инструкции производителя кабеля. Если документация невнятно описывает последовательность действий или написана на
Устранение неполадок
Устранение неполадок По той же причине, по которой невозможно создать универсальное руководство по прошивке мобильных телефонов, не существует и универсальных рекомендаций по устранению неполадок.Самая частая и пугающая ситуация – после перепрошивки телефон не
Устранение эффекта красных глаз
Устранение эффекта красных глаз Собственно, теперь для этого никаких знаний не нужно, а вот владельцам старых версий фотошопа стоит задуматься.В той же группе инструментов, где и уже использованная нами кнопочка для вырезания кадра, находится кнопка Red Eye Tool (его