Sprites de jogos com Inkscape e Animate

19.08.06

Certa 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:

Sprites alinhados na imagem

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 :) .

7 alunos não foram à escola.

  1. Rafael

    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 :D

  2. Jonatas Oliveira

    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.

  3. madson

    Legal o texto karlisson!
    Realmente, ferramentas livres quando se fala de design e animação não ficam para trás! valew.

  4. Hugo

    Que legal!

    Brincadeira, digai! ficou massa teu blog e o texto tb =D vo começar a visita-lo de vez em quando! vlws

  5. Bruno Guedes(Toupeira Profissional)

    É ó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.

  6. Luis Alberto Silva Costa

    Valeu Nerdson, digo, Karlisson! ;)

  7. douglas

    eu quero mata aula