Миникарта 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...

Другие вопросы по тегам