Tag Archives: allegro

AnimAllegro – Framework simples de animação

Há muito tempo não mexo com Allegro — biblioteca multimedia escrita em C –, mas fuçando em minhas coisas, encontrei algumas classes de suporte que eu utilizava em meus projetos em C++. Resolvi primeiro distribuir algumas classes que fiz para tratar sprites e animações (que eu já tinha postado sobre), então chamei tudo isso de AnimAllegro, um framework bem básico, e aqui vou falar sobre ela, brevemente.

A AnimAllegro é simples em dois sentidos:

  1. Ela está muito simples. Faltam alguns features para que ela possa ficar interessante. Entretanto, ela já é funcional.
  2. Ela é simples, porque fazer um sprite animado tem que ser simples. Vou mostrar alguns exemplos:
AnimSprite sprite;

sprite.AddFrame("standing.bmp");

sprite.AddFrame("walking1.bmp");
sprite.AddFrame("walking2.bmp");

sprite.AddState(new State(0, 0)); // Animações do sprite parado
sprite.AddState(new State(1, 2)); // Animações dos sprite andando
sprite.FitStates();
sprite.SetCurrentState(0); // Escolhe o estado parado.

sprite.SetPosition(10, 10);

Para que ele anime, basta chamarmos o método run, passando um bitmap por parâmetro para que ele exiba o sprite, no looping principal:

sprite.run(bitmap_buffer);

Sempre que precisar mudar de estado, basta chamar o método SetCurrentState. Você pode ver um exemplo completo aqui.

Dá para perceber que ainda ainda falta implementar algumas coisas essenciais, como por exemplo o suporte a spritesheets, aquelas imagem que contém todos os quadros da animação, bem como um suporte aos DATAFILES do Allegro; um melhor controle de velocidade; documentação; etc.

Então aproveitando, gostaria de dizer que o projeto é livre, você pode usar à vontade (de acordo com a licença LGPL), mas que também pode colaborar para melhorar. Basta dar um fork aqui no projeto no Codaset, fazer a alteração que achar conveniente e então enviar.

Ainda tenho muitos outros códigos interessantes em Allegro e C++ que eu criei aqui que gostaria de compartilhar, quem sabe depois eu compilo tudo num framework de jogos. :)

Google Buzz

Viva, é OpenSource

Tenho tantos projetos iniciados que dá até pena deixá-los guardados. Não que sejam super-projetos, porém acho disperdício deixar qualquer monte de código no fundo da gaveta. É como música ou poesia, elas têm sempre o direito de serem divulgadas.

Resolvi então compartilhar alguns joguinhos antigos finalizados e não finalizados, apesar da bagunça no código deles, sempre pode ser útil a alguém que está aprendendo. Coloquei tudo no GitHub.

Queria dar um destaque especial ao Pongo-Line. É um “remake” do Clássico Pong, porém multiplayer online. Estava desenvolvendo com C++, Allegro e RakNet. Faz bastante tempo que comecei ele, porém ainda pretendo terminá-lo. Eu parei quando me deparei com vários problemas de falta de sincronia de dados. É uma ótima oportunidade para aprender técnicas para evitar atraso, por isso não esqueci desse projeto.

Ainda tem pouca coisa lá, mas vou colocando coisas novas lá. Se você quiser ajudar, basta dar um fork em algum projeto e continuar mexendo, sinta-se a vontade. Caso tenha algum problema com Git no Windows, eu fiz um pequeno tutorial sobre isso.

Google Buzz

GameJam do Itaú Cultural

PICT0018Pois é, pessoal, eu participei.

Eu vi a notícia na última hora. No domingo, dia 2 de agosto, sendo que as inscrições iriam até o dia 5, e a competição iniciaria no dia 7. Geralmente não vou a eventos quando fico sabendo de última hora assim, mas nesse eu tinha que ir. Corri atrás de pessoas para participar comigo, e parece que ninguém tava muito afim, talvez porque era de última hora. Contudo, consegui alguém. O PotHix tava muito afim de ir. E apesar de dizer que tem a mesma resistência com eventos de última hora, resolveu particiar.

O evento aconteceu no galpão da Universidade Anhembi Morumbi. Um pouco longe de casa, ainda mais para ir de meio de transporte público. Porém eu fui. Peguei meu notebook, roteador, câmera fotográfica e pendrive, e fui. Não levei nada para dormir, pensei que voltar no sábado de manhã para dormir e voltar à noite para ficar até o fim seria uma boa tática. Apesar de ser mais de duas horas de viagem, foi o que eu fiz.

Às 19h e pouco fizeram a abertura e falaram qual seria o tema: Máquinas Criativas – Robôs e computadores podem tomar decisões inovadoras?

OurDeskTema muito complexo, sem dúvidas. Quantas coisas podemos fazer com base nesse tema? Nada fácil. Pensamos e pensamos muito, até que o PotHix teve uma idéia bem bacana. Aí então resolvemos começar no desenvolvimento. Montei a estrutura básica do projeto, coloquei umas classes úteis que eu uso em vários projetos com Allegro, criamos um repositório GIT e então começamos a desenvolver.

Não tinha wi-fi, o que dificultava muito. Então fizemos uma rede simples com o meu roteador. Utilizamos o GIT para controle de versão. Eu nunca tinha mexido com nenhum software de controle de versão, então o PotHix me ajudou bastante nisso.

Primeira Noite

PICT0010 Ficamos mexendo no projeto até umas quatro e meia da manhã, e nesse ponto o sono já dominava. Já tinha tomado bastante café, mas mesmo assim não dava mais para continuar. Resolvemos ir embora para dormir. Não sabia muito bem onde pegar ônibus dali, e acabei fazendo o caminho mais difícil, porém depois de três ônibus e um metrô (de ponta a ponta) eu cheguei em casa quase às oito da manhã.

Deu para dormir sossegado até às três da tarde, então fui eu para lá novamente. Às sete da noite eu já estava lá novamente, tirei meu equipamento, montei e comecei a arrumar alguns bugs que estavam dominando, e que eu não conseguia resolver no momento de sono. Logo o PotHix chegou e voltamos à programação normal.

Segunda Noite

A madrugada foi bem produtiva, porém às cinco da manhã já matava agente. Demos uma pausa, enquanto o PotHix tirou uma soneca na mesa, eu fiquei jogando no PSP dele, não consegui dormir de jeito nenhum. Depois de tomar um fast café da manhã, e resolvemos entrar no modo hard programming.

Desastres

PotHix Claro que ninguém está livre de desastres, e muito menos nós. Umas oito da manhã estávamos nós programando lá até que meu teclado simplesmente para de funcionar. Pensei que tivesse ativado alguma trava, mas não. Não consegui fazê-lo voltar a funcionar. Tivemos que ir ao laboratório utilizar o teclado USB dos computadores de lá. Levamos todos os equipamentos até lá. O auxiliar do laboratório nos disse que as tomadas eram 220V, porém logo esquecemos, é claro. Ligamos o roteador, que funcionou por uns minutos, permitindo um último pull/push do git, até morrer.

Mas somos brasileiros, não desistimos tão fácil. Apesar do código estar muito feio, o projeto cheio de bugs, sem teclado e sem roteador, continuamos, não faltava muito. Pegamos algumas midis e colocamos no jogo, que ficou por ali mesmo. Já era de tarde, então finalizamos daquele jeito mesmo.

Finalizando

Pegamos o pendrive, copiamos e demos à organizadora. Por sorte ela testou, e eu vi que havia esquecido de copiar a dll do Allegro, então coloquei-a no pacote e mandamos a ela novamente. Pronto. Funcionou. Ela disse que o pendrive ficava “de presente” para nós, e eu acabei perdendo-o no Pedra Papel e Tesoura para o PotHix.

Depois fomos “almoçar” algumas coisa na lanchonete da universidade, e trocar idéias com pessoas de alguns grupos.

O Game

screenshot4 A idéia do nosso jogo foi muito boa, infelizmente não conseguimos colocar ela perfeitamente em prática, mas mesmo assim aqui vai ele.

O robô vai colocando caixas aleatoriamente, e você tem que trocar as caixas até que formem uma linha vertical ou horizontal igual.

O código fonte já está no GitHub, e está sob a licença MIT. Não que vá fazer muita diferença, porque o código tá muito feio, muita gambiarra. Se quiser baixar a versão binária, clique aqui.

Saldo

Foi muito bom. Conheci bastante gente bacana da área de jogos, aprendi bastante sobre Git, que eu precisava, e ainda programamos um jogo. Claro que não foi muito bem o que queríamos, porém é sempre uma experiência muito boa.

Valeu a pena, e na próxima eu estarei também, com certeza. O PotHix também postou sobre isso, e acho que o texto dele ficou bem melhor que o meu. Deem uma olhada.

Desculpem pela má qualidade das fotos, o local não tinha uma boa iluminação, e a câmera também não colaborou.

Google Buzz