quarta-feira, 2 de setembro de 2009

O GamePops não funciona em alguns sites...

Yo!

Alguns de vocês provavelmente já viram que o GamePops não funciona em alguns sites, pois bem...

Desde que lancei o GamePops 2, tive diversos problemas com carregamento de xml e assets fora do Flash. Isso tava me deixando maluco. Entrei em contato com o pessoal da MochiAds e eles me orientaram a utilizar certos parâmetros de compilação. Chato. Mas funcionava. Não fiquei contente com isso. Pior ainda: em alguns sites (como o Kongregate) tudo vai bem, mas em muitos outros, como no Gamesome por exemplo, simplesmente não funciona!

Fiquei tentando encontrar qual era o problema e depois de muito procurar, eis que fico sabendo que a maioria dos sites pega apenas o swf do jogo! Mesmo que o MochiAds forneça um zip com tudo! Malditos!!!

Pois então... procurei por uma solução que não fosse importar todos os assets dentro do meu arquivo .fla e torná-lo ineditável. Estava quase desistindo quando um colega de trabalho me deu uma dica: incorportar o conteúdo através de "tags" especias do ActionScript 3.

É bem simples:

Caso queira fazer que uma imagem chamada image.png seja incorporada no seu jogo, faça o seguinte:

[Embed(source="image.png")]
private var Image:Class;

Isso vai fazer com que Image seja uma classe instanciável em tempo de execução. Como ela é uma figura, deve ser instanciada da seguinte maneira:

var pic:Bitmap = new Picture();

A figura image.png é incorporada no .swf e está pronta pra ser utilizada. Sem loading, sem nada. Quando você for utilizar, não é necessário colocar listeners pra carregamento, erro, etc. Se for dar algum erro, ele acontecerá em tempo de compilação :)

Animei bastante com isso, então fui buscar mais sobre. Descobri que Embed em mais parâmetros e que dá até pra incorporar outros swf e pegar da biblioteca os assets. Assim:

[Embed(source="library.swf", symbol="SymbolInsideLybrary")]
private var AssetClass:Class;

Simples não? Deste jeito dá pra fazer assets externos ficarem todos num só swf :)

Melhor ainda! Caso você queira incorporar algum tipo de arquivo que o Flash não reconheça por default, você pode usar a propriedade mimeType. Assim:

[Embed(source="../assets/text.txt", mimeType="application/octet-stream")]
private var TextFile:Class;

var textFile:String = new TextFile();

Magico, não? Tá! Não é qualquer arquivo. Tentei com um docx e não deu. Mas este exemplo acima funciona :)

Como se não fosse fácil, o FlashDevelop ainda tem uma opção: "Insert into document" que é acessível com o botão direito sobre um asset de tipo default (imagem, swf, etc).

Pois então. Em alguns dias (assim que comprar uma nova fonte pro meu PC), vou começar a "traduzir" o GamePops para usar esta funcionalidade, pra ver se assim TODOS os sites de jogos em Flash tenham o GamePops!!!! hehehe

Referência:
http://livedocs.adobe.com/flex/3/html/help.html?content=metadata_3.html

4 comentários:

Sonic disse...

massa cara, estou trabalhando com flash aqui, e logo logo vamos passar tudo pra as3. se surgir um erro como esse, jah sei como resolver... valeu...

Kleber disse...

Fico feliz que tenha ajudado. Essa coisa de embed é uma das coisas mais difíceis de encontrar na internet. Daí resolvi colocar aqui pra que os que precisem possam encontrar com facilidade :)

JcB@dB0y disse...

Kleber

Primeiramente, parabéns pelo trabalho no GamePops 2. Sei o quanto é cansativo ter "vida dupla", isto é, trabalhar em casa e no trampo. :P

Se tiver interesse em publicar notícias de seus games em nosso blog teremos o prazer em divulgar.

www.pcgamexp.com.br

Anônimo disse...
Este comentário foi removido por um administrador do blog.