При создании анимации движка мы уже наблюдали, что обновление экрана происходит мерцание нежелательно. Этот эффект достигается за счет времени, необходимого для удаления этого изображения и генерировать новый обновленный, Результатом одушевленные предметы.
Одним из способов избежать этого называется Доубла буфера O “реoublebuffered“, используются так, что два изображения (видеопамяти) в то же время. С опорой на, увидеть другую и минимизировать время переключения между изображениями устраняя мерцание.
В вычисление, нескольким буферизации является использование более чем одного буфер для поддержания блока данных, таким образом, чтобы “читатель” см. полную версию данных, а частично обновленной версии данных, который создается “писатель”. Он также используется, чтобы избежать необходимости в использовании двойного ОЗУ, когда читатели и писатели разных устройствах.(W)
Будет ли изменить класс “Классная доска” Мы модифицированы включением анимация двигатель реализовать этот метод. Нам нужно будет знать размеры графического дисплея достаточно памяти для хранения, и определить объект “Изображение” будет, на котором мы рисуем графики.
Размер D; частный Изображение mImage = NULL;
Метод “краска” чертеже первый размер, чтобы генерировать. Вызов функции “checkOffScreenImage()” уверен, будет обрабатывать объект “mImage” опираться на.
Чтобы нарисовать на этом объекте запроса электронной графика с функцией “GetGraphics“. Тогда какой цвет наполнит нас использовать для фона по этому пункту рисования прямоугольника с заливкой.
Подпрограммы буду называть нанесения изображения, мы внедрили в функции “paintOffScreen” прохождение этого объекта в качестве параметра диаграммы для использования в качестве холста.
Последняя функция обращается в холсте или экране графики.
общественного синхронизированы недействительными краска(Графика г) {
D = GetSize();
checkOffScreenImage();
Графика offG = mImage.getGraphics();
offG.setColor(getBackground());
offG.fillRect(0, 0, d.width, d.height);
paintOffScreen(mImage.getGraphics());
g.drawImage(mImage, 0, 0, нулевой);
}
Функция “checkOffScreenImage()” будет контролировать, если вы изменили размер окна используются для отображения графической информации и создания объекта, на котором рисовать, с помощью функции “CreateImage()“
частных недействительным checkOffScreenImage() {
Размер D = GetSize();
если (d.width == 0 || d.height == 0) {
возврат;
}
если (mImage == NULL || mImage.getWidth(нулевой) != D.width
|| mImage.getHeight(нулевой) != D.height) {
mImage = CreateImage(d.width, d.height);
}
}
Функция “paintOffScree” это старая функция или метод “краска” графики рисовать наш объектов, поэтому она не заслуживает дополнительных комментариев. Мы просто поменяли свое имя.
общественного недействительными paintOffScreen(Графика г){
Перечень перечисление = bd.elements();
Объект OB;
в то время как(enum.hasMoreElements()){
OB = enum.nextElement();
если(OB InstanceOf SimpleDrawable){
((SimpleDrawable) ли).краска(грамм);
}
}
}
При запуске приложения вы увидите, что изображение больше нет мерцания.

Должно быть связано добавить комментарий.