Sprites de jogos com Inkscape e Animate
19.08.06Certa vez procurei um software para GNU/Linux que facilitasse o maçante processo de desenhar e testar sprites de jogos 2D. Não achei nada.
Já fiz isso no Windows usando o Flash, em um jogo (Anacroz Tactics) que desenvolvi com um colega de faculdade. O Flash facilita bastante o processo com o uso de frames, separando cada posição da animação em um frame diferente, e a pré-visualização da animação no próprio programa, onde os sprites são desenhados.
No entanto, eu pretendo criar a continuação desse jogo totalmente no GNU/Linux, sem o uso de ferramentas proprietárias. Pensei num modo de criar e testar os sprites de forma que não seja necessário executar o jogo toda vez que eu quiser testar a animação, nem criar gifs animados, além de outros trabalhos desnecessários, como por exemplo, mudar a cor de um sprite e ter que mudar em todos os outros (sic).
Para desenhar os sprites, usei o Inkscape, um excelente software de ilustração vetorial que vem evoluindo bastante, e na minha humilde opinião, equivalente ao Corel Draw em muitos recursos.
Criei uma imagem de teste de 180 x 180 pixels, dividida em 9 quadros, cada um sendo um sprite:
![]()
Mas e se eu tivesse que mudar a cor do pingüim, teria que mudar em todos? Não!
O Inkscape, assim como vários outros softwares de ilustração vetorial, possui o recurso de clonagem, ou seja, eu só precisei desenhar* o pingüim uma vez, depois criei vários clones e os posicionei na imagem. Graças a isso, uma possível alteração nos sprites ao longo do projeto não custaria quase nada, pois se o original for alterado, todos os clones são automaticamente alterados.
Embora não seja necessário criar uma imagem para cada sprite, devido ao fato das bibliotecas de jogos implementarem funções de leitura e mapeamento de imagens, eu precisei gerar imagens temporárias de cada sprite para visualizar a animação com o programa animate, da suíte de aplicativos Imagemagick. Antes, eu precisei saber como.
Felizmente, o Inkscape não é somente um aplicativo com uma interface gráfica. É possível executar algumas funções via linha de comando. A opção que usei simplesmente “corta” e exporta partes da imagem em arquivos PNG:
inkscape -e imagem1.png -a 0:0:60:60 modelo.svg
Através da opção -a, definindo uma área retangular com os pontos x0, y0, x1 e y1, ele exporta somente essa região da imagem num arquivo PNG especificado com a opção -e. Criei então um pequeno script em Python para automatizar esse processo, gerando todas as imagens necessárias, passando como parâmetros o arquivo SVG, as dimensões da imagem e a quantidade de sprites na imagem.
Agora basta executar o comando animate especificando o delay entre cada imagem e o conjunto de imagens a serem exibidas:
animate -delay 10 *.png
E uma janela aparece exibindo a animação.
Bem, espero ter mostrado um pouco do poder do Inkscape e uma boa técnica para facilitar o desenvolvimento de jogos para GNU/Linux, que pode ser aplicada em vários outros casos. Agradeço os comentários, sugestões e críticas construtivas!
*Na verdade eu não o desenhei, apenas o adaptei
.

Lembro como foi trabalhoso criar esses sprites no flash, um trabalho manual chato demais, vai facilitar bastante mesmo a continuação do jogo
É incrível como algumas ferramentas livres realmente facilitam tanto nossas vidas
Quando você falou comigo sobre esta técnica, você não citou que as imagens eram clones, por isso falei que daria mais trabalho.
Parabéns pelo “artigo”!
Sugestões:
* Disponibilizar o script em Python que você usou.
* Mostrar pelo menos uma imagem recortada.
Legal o texto karlisson!
Realmente, ferramentas livres quando se fala de design e animação não ficam para trás! valew.
Que legal!
Brincadeira, digai! ficou massa teu blog e o texto tb =D vo começar a visita-lo de vez em quando! vlws
É ótimo quando começo a fuçagem de arquivo e acho posts super-úteis feito esse daqui. Vai ser uma mão na roda quando eu resolver começar a sério meus projetos em programação de jogos(vide blog do autor do comentário).
Sendo assim, muito obrigado.
Valeu Nerdson, digo, Karlisson!
eu quero mata aula