Я использую цикл для запуска рисования двойной буферизации.Это, вместе с переопределением моего единственного метода перерисовки Panel, предназначено для того, чтобы передать полный контроль над перерисовкой моему циклу и выполнять рендеринг только тогда, когда это необходимо (т. Е. В GUI было внесено некоторое изменение).
Это моя процедура рендеринга:
Log.write("renderer painting");
setNeedsRendering(false);
Graphics g = frame.getBufferStrategy().getDrawGraphics();
g.setFont(font);
g.setColor(Color.BLACK);
g.fillRect(0, 0, window.getWidth(),window.getHeight());
if(frame != null)
window.paint(g);
g.dispose();
frame.getBufferStrategy().show();
Как видите, это довольно стандартно.Я получаю объект grpahics из буферной стратегии (инициализированный до 2), делаю его все черным и передаю его в метод рисования моего объекта "window".
После того, как окно выполнено с использованием графического объекта, я располагаюи вызовите show в стратегии буфера для отображения содержимого виртуального буфера.
Важно отметить, что окно передает графический объект многим другим дочерним компонентам, заполняющим окно, и каждый из них, в свою очередь, по очереди, использует один и тот же экземпляр графического объекта для рисования чего-либо на экране: текста, фигур или изображений.
Моя проблема начинает проявляться, когда система работает и отображается большое изображение.Изображение выглядит разрезанным на кусочки и рисуется снова и снова (3-4 раза) с различными смещениями внутри того места, где изображение должно быть отображено.Смотрите мои прикрепленные изображения:
Это оригинальное изображение: альтернативный текст http://img109.imageshack.us/img109/8308/controller.png
Вот что я получаю: альтернативный текст http://img258.imageshack.us/img258/3248/probv.png
Обратите внимание, что во второмизображение, я рисую фигуры поверх изображения - они всегда в правильном положении.
Есть идеи, почему это происходит?Если я сохраню изображение в файл, как оно есть в памяти, то перед вызовом g.drawImage (...) оно идентично оригиналу.