Миникарта java игра jApplet мерцает
Я делаю игру для 2 игроков, используя JApplet. Я рисую экран первого игрока с левой стороны, а экран второго игрока - с правой стороны, а затем рисую мини-карту всей карты в нижнем центре. Я рисую все в буферизованное изображение под названием bimg, затем использую bimg.getSubimage, чтобы получить обе стороны для каждого игрока в зависимости от их местоположения. Я использую стандартный метод drawImage с дополнительными параметрами, чтобы нарисовать уменьшенную версию всего изображения карты. У меня проблема в том, что миникарта, которую я рисую, мерцает каждые несколько кадров, иногда кажется, что сначала она рисует левую сторону, а иногда - сначала правую, а не обе стороны, а затем карту поверх них. Мне интересно, есть ли способ, который кто-нибудь может предложить, который мог бы помочь решить эту проблему. Я надеюсь, что контекст, который я предоставил, достаточно ясен, вот код для ссылки. Спасибо
drawP1Side = bimg.getSubimage(p1.viewX, p1.viewY, 400, 700);
drawP2Side = bimg.getSubimage(p2.viewX, p2.viewY, 400, 700);
g.drawImage(drawP1Side, 0, 0, null);
g.drawImage(drawP2Side, 410, 0, null);
g.drawImage(bimg, 320, 500, 200, 200, null);
1 ответ
На основании описания...
Добро пожаловать в удивительный мир причин, почему вы не должны отвергать paint
контейнеров верхнего уровня.
В основном, контейнеры верхнего уровня, такие как JApplet
не являются двойной буферизацией, это заставляет их мерцать при обновлении.
Вместо этого вы должны создать себе пользовательский компонент, расширяющийся от чего-то вроде JPanel
и переопределить это paintComponent
метод и выполнить ваши заказные картины там...
Посмотрите на Выполнение Custom Painting для более подробной информации
Все компоненты Swing реализуют ImageObsever
(от JComponent
), так что вы должны проходить this
как ImageObserver
параметр для drawImage
при условии, что вы звоните изнутри JComponent
...