Java Как вы управляете слоями при рисовании?

Я использую пакет Java AWT для рисования с использованием Graphics2D и BufferStrategy на холсте. Canvas помещается в JFrame. Когда я помещаю сущности из своей игры на холст и рисую их, кажется, что они отображаются в случайном порядке. У меня есть список сущностей, и они рисуются с использованием расширенного цикла for. Каждый раз, когда я запускаю игру, Сущности рисуются в случайном порядке, но всегда в одном и том же порядке, пока я не перезапущу программу. Это код в моем цикле для рендеринга.

for (Entity e : EntityManager.list) {
        e.update();
        e.draw(g, e.x, e.y);
}

Это мой метод рисования:

public void draw(Graphics g,int x,int y) {
    g.drawImage(image,x,y,null);
}

Я много искал, но не нашел точного ответа о том, как Graphics2D управляет слоями. Также в Javadoc не упоминается, как он работает со слоями.


person Zach Sugano    schedule 02.04.2013    source источник
comment
Он рендерится поверх ранее визуализированных объектов.   -  person Savlon    schedule 03.04.2013
comment
Если бы это было так, не было бы столько случайностей в слоях...   -  person Zach Sugano    schedule 03.04.2013
comment
Вероятно, в слоях есть случайность, потому что вы постоянно прокручиваете их в своем цикле. Они перекрываются в том порядке, в котором они нарисованы. Проверьте это; удалите цикл for и в методе рендеринга нарисуйте изображение, в строке после этого метода рисования нарисуйте другое изображение. Последнее изображение будет поверх другого изображения.   -  person Savlon    schedule 03.04.2013
comment
О, спасибо, исправил   -  person Zach Sugano    schedule 03.04.2013


Ответы (1)


Слои рисуются в том порядке, в котором они добавляются в список. Чтобы управлять слоями, вам просто нужно создать список массивов, который включает в себя слой и объект, и поддерживать их порядок, и вы можете изменить его таким образом.

person Zach Sugano    schedule 03.04.2013
comment
Вы можете добавить компонент z (порядок отрисовки) к вашему объекту. Это избавляет вас от необходимости упорядочивать список, но вам нужно несколько раз просмотреть список при рисовании. Или вы можете использовать карту, где компонент z является ключом, а объект — объектом. - person Gilbert Le Blanc; 03.04.2013