Qual é a melhor maneira de criar animações ao desenvolver o Android?

10

Estou tentando criar meu primeiro jogo para Android e atualmente estou tentando descobrir (com alguém que fará os desenhos e outro programador) qual é a melhor maneira de criar animação. (Animações como um personagem em movimento etc.)

No início, o designer disse que podia desenhar objetos / personagens e animá-los com flash, para não precisar desenhar todos os quadros de uma ação. O outro programador e eu não conhecemos muito o Flash, então sugeri extrair todas as imagens da animação em Flash e fazê-las aparecer uma após a outra quando a animação for iniciada.

Ele disse que isso acabaria consumindo muito recurso na CPU e eu tendem a concordar, mas eu realmente não vejo como devemos fazer animações suaves sem que isso seja muito difícil para o hardware e, se possível, não tenha o designer desenha todos os quadros no Adobe Illustrator.

Um desenvolvedor de jogos Android experiente pode me ajudar a equilibrar isso para que possamos passar para outras partes do jogo, pois não tenho idéia de qual é a melhor maneira de criar animações.

Adam Smith
fonte

Respostas:

12

Se você está pensando em animação 2D, renderizar um sprite e outro não será um problema para o dispositivo (a menos que seus sprites sejam enormes).

Abaixo está um sprite de animação típico que foi o primeiro que encontrei com um pouco de pesquisa. Essa é uma técnica comumente usada e há muitos sites que oferecem planilhas gratuitas (e sempre verifique a licença).

Fonte da imagem: [aqui] (http://gaminggroundzero.com/?page_id=31)

Imagem + fonte do autor: aqui

O verde é definido como a cor transparente da imagem, para que você não tenha áreas indesejadas de cor. Você precisará conhecer as coordenadas de cada animação na sequência de animação na planilha para reproduzi-las.

Para o Android, podemos dar uma olhada em um mecanismo de jogo de código aberto de Chris Pruett (ex-Google) chamado Replica Island . O código fonte está disponível e podemos ver o SpriteAnimation.java e SpriteComponent.java .

A SpriteAnimationé simplesmente criado com uma contagem de quadros e um ID exclusivo, e cada ator no jogo pode ter várias animações. A SpriteAnimationpode ser dado um número de AnimationFrames, cada um com uma duração em milissegundos. Isto significa que diferentes animações podem ser trocados dentro e fora, dependendo se o personagem se move ou ataques etc (ver em AnimationComponent.playAnimation(int id)).

Cada iteração do loop do jogo, os AnimationFrame's getFrame(float time)é chamado, e ele verifica quanto tempo se passou desde a última iteração do loop principal e decide qual quadro para jogar ao lado, em seguida, retorna o quadro para obter enviado para o sistema de renderização. Isso permite pular quadros de animação se a animação estiver indo muito devagar.

Espero que este exemplo funcione, e você pode vê-lo sendo usado no jogo real no Android Marketplace aqui .

Martin Foot
fonte
Muito obrigado pela resposta bem explicada e detalhada! Vou ver como posso adaptar isso ao meu jogo. Isso é muito útil!
Adam Smith
@ AdamSmith: Usar folhas de sprite como essa é a melhor maneira de animações em 2D. Não importa se o seu artista cria as animações em flash ou outro programa, contanto que ele pode exportar a animação para as imagens que você pode então embalar em um sprite folhas
bummzack
@bummzack Esse é o tipo de resposta que eu esperava, obrigado!
Adam Smith
O @AdamSmith também deve observar (para evitar confusão) que o Replica Island não usa folhas de sprite, ele usa arquivos únicos. A discussão sobre por que as planilhas são úteis pode ser encontrada aqui e (com mais detalhes) aqui .
Martin Foot
@ Martin Foot, você deu uma explicação muito agradável. Mas ainda tenho confusão, estou tendo um tipo de animação de 10 a 15 e tenho quadros de cada um deles com o tamanho de 320x480, que você pode dizer uma animação em tela cheia. Então, o que você me sugere que devo obter para o arquivo fonte de animação SpriteSheet ou Single? Estou muito confuso sobre o que usar. Por favor, sugerir-me a melhor maneira .. Muito obrigado ....
Scorpion