Qual é a melhor maneira de lidar com sprites rotativas para um jogo de cima para baixo

StackOverflow https://stackoverflow.com/questions/1275482

  •  16-09-2019
  •  | 
  •  

Pergunta

Eu estou trabalhando em uma visão de jogo 2D de cima para baixo no momento e estou aprendendo uma tonelada sobre sprites e manipulação de Sprite. A minha pergunta é como lidar com um conjunto de sprites que podem ser giradas em até 32 direções.

No momento em um determinado objeto tem sua folha de sprite com todas as animações orientadas com o objeto apontando a 0 graus em todos os momentos. Agora, uma vez que o objeto pode girar em até 32 direções, qual é a melhor maneira de trabalhar com essa folha de sprite originais. Meu atual melhor palpite é que o programa basicamente criar dinamicamente 32 folhas mais sprites quando o objeto é carregado pela primeira vez no jogo, e depois todas as instâncias subsequentes do mesmo tipo de objeto irá compartilhar essas folhas de sprite.

De qualquer forma, qualquer conselho a este respeito seria útil. Deixe-me saber se eu preciso reformular a pergunta, eu sei que é kindof um estranho. Graças

Edit: Eu acho que para mais esclarecimentos. Se eu tiver, por exemplo, um objeto que tem 2 animações de 5 quadros um pedaço, que é uma folha de sprite bastante fácil de criar e organizar, é uma grade de 2x5 simples (ou 5x2, dependendo de como você colocá-lo fora). Mas o problema é que agora esses 2 animações tem que ser girada em 32 direções. Isto significa que, no final, haverá 320 sprites individuais. Vou dizer que (e me corrija se estou errado) desde que eu estou preocupado com o desempenho e frame-rate, girando os sprites na mosca cada quadro não é uma opção. Então, como se essas 320 sprites que compõem estes 2 animações ser organizado? Seria melhor para

  • Pense nisso como 32 2x5 folhas de sprite
  • dividir a folha de sprite em quadros individuais, e em seguida, têm uma matriz 32 direcções diferentes por quadro (modo 10 matrizes de 32 sprites direccionais)
  • Outro ....?
  • Não importa?

Graças

Foi útil?

Solução

Normalmente você vai sacrificar o tempo de processador ou memória, e você precisa de equilíbrio entre os dois. A menos que você tem algum grande limite para o seu processador ou você está computando um monte de coisas caras, não há nenhuma razão real para colocar tudo isso na memória. Girando algumas sprites com uma transformação é suficiente barato que não é definitivamente vale a pena para armazenar 32x tanta informação na memória -. Especialmente porque essa informação é um monte de imagens, e as imagens usar uma grande quantidade de memória, relativamente falando

Outras dicas

As 32 indicações para o sprite se traduzem em 32 rotações por 11,25 graus.

Você pode reduzir o número de imagens pré-calculados a 8 só calcular os primeiros 90 graus (11.25, 22.5, 33.75, 45.0, 56.25, 67.5, 78.75, 90.0) e usar as operações de aleta dinamicamente. Flips são muito mais rápidos porque eles essencialmente apenas alterar a ordem uma imagem é copiada do buffer.

Por exemplo, quando você exibir uma imagem que é girado por 101,25 graus, carregar a imagem de pré-calculada de 67,5 graus e lançá-lo verticalmente.

Eu só percebi que isso só funciona se o seu gráfico é simétrico; -)

Quando se fala de um computador moderno, você pode não precisa otimizar nada. A memória utilizada pelo pré-cálculo os sprites é certamente insignificante, eo uso da CPU ao rodar a imagem, provavelmente, também. Quando você está programando para um dispositivo incorporado no entanto, ele faz questão.

Você só pode girar os sprites diretamente, definindo a parte de rotação do Sprite da Transform.

Para um código de exemplo, veja o sprite Chimp neste pygame tutorial . Ele gira os sprites quando o chimpanzé é "tonto".

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