/ / Ordem Z dinâmica no Java Game Engine - java, desenho, mecanismo de jogo

Ordenação Dinâmica de Z no Java Game Engine - java, desenho, motor de jogo

Estou construindo uma estrutura básica de jogos Java 2D, mas não tenho certeza da melhor maneira de renderizar meus objetos de maneira eficiente com o pedido em z. As únicas soluções que vieram à mente foram:

  • Usando um ArrayList para armazenar os objetos e classificando-os com um Comparador por profundidade quando as alterações foram feitas

  • Usando um ArrayList para armazenar HashSets de objetos que pertencem à mesma profundidade

A idéia é manter os objetos ordenados para que o objeto de renderização precise apenas percorrer os objetos e renderizá-los. A classificação pode ser realizada por outra coisa.

A primeira opção requer uma classificação constante doArrayList sempre que objetos forem adicionados, removidos ou movidos para uma profundidade diferente. A segunda opção só precisa mover objetos individuais para diferentes HashSets quando houver uma alteração de profundidade, mas é usada mais memória (dependendo do número de profundidades).

Qual solução (soluções alternativas também são muito bem-vindas) seria a mais lógica?

Respostas:

0 para resposta № 1

Na maioria dos jogos, a ordem dos objetos é bastante constante. Apenas de vez em quando uma única ordem Z de um objeto é alterada. Usando um ArrayList pois isso normalmente faria o trabalho. Observe que não há necessidade de classificação constante. Você adiciona os objetos classificados apenas no início. Em seguida, basta adicionar / mover um único objeto para esse local no ArrayList.

Certifique-se de usar a lista sincronizada ou outro método para evitar ConcurrentModificationException enquanto o thread da GUI está varrendo a lista, enquanto outro thread está alterando-o.