Mais uma vez com a ajuda do pessoal do fórum GP32X, especialmente o usuário hmn, foi possível remover os vazamentos de memória citados na liberação da versão anterior. Na verdade, eu até havia encontrado o problema, porém não conseguia pensar em uma solução.
Tudo era causado por um erro conceitual na herança das classes. Diversas classes, como as responsáveis por inimigos, personagens e objetos, eram derivadas de uma classe em comum, chamada Listable, que é uma lista ordenada.
O problema acontecia quando um objeto da classe derivada era destruído, pois somente era chamado o destrutor da classe derivada do primeiro item da lista, posteriormente apenas o destrutor da classe base, no caso Listable, era invocado. Dessa maneira, muito espaço alocado em memória, como por exemplo a imagem dos personagens, ficava sem referência quando os objetos eram destruídos, caracterizando o vazamento de memória.
A solução foi simples, declarar o destrutor da classe base como virtual acaba forçando a execução de ambos os destrutores, tanto da classe base como da derivada. Fácil, não :P
O que realmente importa é que agora não é mais necessário ativar memória swap para evitar travamentos, mesmo com um longo tempo de jogo. Pelo menos teoricamente. Espero que essa seja a versão definitiva do Dingoo. Tentarei dar continuidade à trilogia em meados de setembro.
V1.2 (19/08/2010)
Melhorias/Correções
- Corrigidos os vazamentos de memória menores, citados na versão anterior (agradecimento especial a hmn do fórum GP32X).
Links para download

Meu Dingoo chegou ontem e resolvi testar este jogo. Roda muito bem, apesar de alguns botões ficarem meio estranhos (como start para fechar diálogos).
ResponderExcluirÉ incrível ver um programa tão grande rodar em algo tão pequeno. Obrigado e parabéns pelo ótimo trabalho :D
Que bom que chegou seu aparelho, você vai ver que dá pra fazer muita coisa com ele.
ResponderExcluirRealmente as funções vinculadas ao start não ficaram muito legais, mas pra alterar isso eu teria que refazer muita coisa do código e creio que não valeria a pena o esforço. Com o tempo dá pra se acostumar.
Um abraço!
Já consegui compilar o Rockbot para ele, só não rolou porque trava (e quando volta ao gmenu trava o dingoo mesmo). Mas acho que vi algo sobre isso, de como inicializar a SDL nele de forma errada pode compilar.
ResponderExcluirVou ter que ver se acho algum exemplo simples para começar a ajustar meu código com uns #ifdef DINGUX ;)
Pro video é simples, use sempre SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE)
ResponderExcluirConheço bem esses #ifdef's hehehehe.
Boa sorte!
O Dingux não suporta profundidade de cor de 8 bits?
ResponderExcluirIsso é um problemão para meu game, hehehe, eu limitei a paleta e tal (para fazer efeitos de color-cycling mais facilmente). Vou ter que retrabalhar essa parte nos sprites, eles ficam com o fundo preto quando rodo o jogo em 16 bits.
A propósito, deu um crash na intro, e uma inexplicável lentidão na apresentação do chefe, mas pulando ela, já consegui rodar o Rockbot em menos de 30 minutos entre instalar o toolchain, ajustar o makefile e colocar uns ifdefs. MUITO bacana :D
Nativamente não suporta 8 bits, mas se não me engano, o Elta criou um rootfs onde aplicou um patch para contornar o problema. Dê uma olhada nesse post: http://boards.dingoonity.org/dingux-development/a-couple-of-rootfs-upgrades/
ResponderExcluirFalei pra você que seria bem mais fácil que portar pro PS2 e DS :P