При создании анимации движка мы уже наблюдали, что обновление экрана происходит мерцание нежелательно. Этот эффект достигается за счет времени, необходимого для удаления этого изображения и генерировать новый обновленный, Результатом одушевленные предметы.
Одним из способов избежать этого называется Доубла буфера 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) ли).краска(грамм); } } }
При запуске приложения вы увидите, что изображение больше нет мерцания.
Должно быть связано добавить комментарий.