Pergunta

Eu estou escrevendo um motor de Sprite básico para minha própria diversão e para obter melhores aquainted com API 2D do Java. Atualmente estou fazendo uso de um grande número de arquivos .png separados com fundos transparentes para representar os vários sprites e diferentes quadros de animação que eu preciso. projetos de desenvolvimento mais jogo 'mundo real' parecem fazer uso de 'folhas de sprites', que contêm vários sprites ou frames de animação dentro de um único arquivo. Além disso, ao invés de fazer uso de suporte a transparência de imagem nativa, as pessoas costumam indicar uma cor arbitrária que não aparece na paleta de sprite para ser a cor transparente. Como é que se gerenciar um arquivo como este programaticamente?

  • como você sabe onde um Sprite começa e começa o seguinte
  • como você lida com a transparência

Pode haver outros fatores que eu não tenha pensado aqui, para que eu possa acrescentar à lista acima, como eu penso em coisas ou como as pessoas fazem sugestões (por favor, fazê-lo nos comentários).

Foi útil?

Solução

Eu uso atualmente arquivos XML gerados por um editor de sprites simples que armazenar o sprite como uma coleção de poses (opcionalmente animados), que por sua vez são uma coleção de quadros ou células. Caixilharia armazenar informação por quadro como os deslocamentos X e Y da estrutura em folha, largura e altura de células, e qualquer transformação (redimensionamento / rotação / matiz / etc.). Poses armazenar quadros individuais e informações de animação (velocidade, por exemplo), e um nome de postura para identificá-los facilmente no programa (hero.pose = sprite.pose [ "standing_right"]). Sprites servir como uma raiz de documentos para armazenar várias poses, como uma pose para cada direção enfrentando.

Uma alternativa menos flexível que utilizado anteriormente foi para especificar os tamanhos fixos para células e folhas e deslocamentos de quadro calcular e tamanhos com base nestes valores (por exemplo, a largura é sempre 32 pixels, de modo terceira entidade gráfica é a 32 * 2). Mais tarde comecei a especificar essas dimensões no nome do arquivo (por exemplo sprite_name_32x64.png) para sprites que não cabem as dimensões celulares fixos. I como a nova abordagem mais, especialmente com um editor simples que preenche a maioria dos valores para mim e me permite usar sprites como modelos para outros sprites.

Eu uso o alfa e transparência das informações armazenadas em imagens PNG diretamente para que eu não precisa se preocupar em guardá-la em outro lugar, embora outras abordagens seria a de escolher um valor fixo por Sprite e armazenar em algum lugar, usar o pixel mais à esquerda na representar, se você sabe que sempre esvaziar, use uma entrada de paleta específico se você estiver usando esses, máscaras Sprite, ou o que você tem.

Outras dicas

Não sobre java, mas geralmente você pode fazer seus todos os sprites no mesmo tamanho. Assim, você será capaz de gerar seus sprites em seu jogo (ou aplicativo) com um simples para loops.

Mas para diferentes sprites porte pode haver problema para o tamanho spritesheet (pode ser maior do que o esperado). Portanto, você deve definir um arquivo XML ou JSON para o seu spritesheet para encontrar suas imagens de sprite em seu código. Você pode usar editores de folha de sprite (há uma abundância deles, eu estou usando Sprite mestre ) para uma rápida e maneira fácil de gerar folha de sprite e coordenar datas.

Faça o seu folha de sprite saber o tamanho eo número de cada sequência.

Pegue uma imagem tamponada de sua folha e usar algo como isto:

currentframe=spritesheet.getSubimage(x, y, w, h); 

Seu x e y vai mudar de acordo com o quadro que se encontra. Mantenha a largura e altura da mesma para tornar as coisas mais fácil.

Esqueça tentando manter o jogo inteiro em uma folha. É nozes e difícil de gerir. Use um novo png para cada seqüência de animação. Se você for anal sobre economia de espaço só criam movimento animações corretas e apenas inverter a imagem em tempo real tamponada para mover para a esquerda.

Java irá ler arquivos PNG com o alfa por isso não se preocupar com a cor de transparência. Desenhar tudo em pngs. Use Photoshop ou Gimp.

Procurar google imagem java para TYPE_INT_ARGB

Bem, já que a maioria deles é costume, os detalhes são até o implementor. Você seria geralmente têm início arquivo com informações de cabeçalho que contém os detalhes de altura / largura e codificação, transparência, etc.

A maior parte do tempo as coisas estão em um arquivo porque ele é muito caro para abrir / ler vários arquivos em comparação com / open ler um arquivo. Muitos motores de jogos usam arquivos zip ou "ziplike" com 0 compressão para tratar um único arquivo como um sistema de arquivos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top