Posts tagged: Action Script 3.0

Portal da Adobe de desenvolvimento de jogos em Actionscript 3.0

By Tiago Frossard | 25/12/2009

O portal é o Adobe Flash Platform Game Technology Center. Ele conta com artigos, tutoriais e códigos em Actionscript 3.0, tanto no Flash quanto no Flex, além de reunir links para outros portais voltados para o desenvolvimento de jogos em SWF, me lembrando muito o que o Gamasutra é para C/C++/OpenGL.

Ótimo passo da Adobe que tem por padrão publicar artigos de altíssimo nível. O portal promete derrubar os mitos por trás da programação em actionscript e trazer uma nova era para o desenvolvimento nas ferramentas, o que torna-o extremamente recomendado tanto para quem já tem experiência quanto para quem está perdido e não sabe por onde começar.

Valeu ao pessoal da Loodo pela dica no twitter

Padrão de Projetos Observer: Implementando mísseis teleguiados – parte 3

By Tiago Frossard | 22/12/2009

Segue abaixo a 3a parte do artigo sobre o padrão de projetos Observer.

Continue reading “Padrão de Projetos Observer: Implementando mísseis teleguiados – parte 3” »

Padrão de Projetos Observer: Implementando mísseis teleguiados – parte 1

By Tiago Frossard | 15/11/2009

Imagine a cena: Você resolve passear com seu filho, prometendo a ele mostrar uma surpresa no final do trajeto. Como qualquer menino inquieto que se preze, ele passa os primeiros 15 minutos do passeio perguntando “Já chegou? Já chegou? Já chegou? Já chegou? Já chegou?”. Esperto como só você seria, resolve cortar as perguntas do garoto com uma única resposta: “Quando chegar, eu te aviso”.

Apesar de simples, isso é tudo que você precisa saber antes de ler sobre o padrão Observer (Observador).

Continue reading “Padrão de Projetos Observer: Implementando mísseis teleguiados – parte 1” »

Decorando um jogo com o padrão de projetos Decorator – Parte 2

By Tiago Frossard | 26/07/2009

Para fechar o artigo anterior, como foi prometido, segue abaixo o diagrama do padrão de projetos Decorator. Apesar da longa explicação e do funcionamento diferente, o diagrama é bem simples:

Continue reading “Decorando um jogo com o padrão de projetos Decorator – Parte 2” »

Decorando um jogo com o padrão de projetos Decorator – Parte 1

By Tiago Frossard | 20/07/2009

Você e 4 amigos, uma esquadrilha de netherdrakes, helicópteros, grifos e hipogrifos, girando por Oshu’gun enquanto procuram o gigante comedor de dragões Durn the Hungerer. Apesar da ameaça, vocês estão confiantes em seu grupo. O entardecer de Nagrand mostra a silhueta do gigante no horizonte e vocês sabem que a hora chegou.

A luta foi perfeita: o gigante arrasou com o grupo nos 20s mais estilosos que qualquer monstro do World of Warcraft já viu. Depois de 15min de brigas sobre quem tem a culpa, alguém descobre que o grupo não estava tão preparado assim. Todos então resolvem melhorar seus equipamentos… Mas como?

Apresento-lhes a morte do grande gigante, o padrão Decorator.

Continue reading “Decorando um jogo com o padrão de projetos Decorator – Parte 1” »

Wiiflash: Desenvolvendo como gente grande

By Tiago Frossard | 01/06/2009

Essa é uma dica rápida para quem quer desenvolver para um videogame de última geração. No ByteArray você o WiiFlash, uma biblioteca em Action Script 3.0 que liga faz a comunicação entre seu Wiimote e o Adobe Flash, Flex ou Air.

Continue reading “Wiiflash: Desenvolvendo como gente grande” »

MVC e o Linkage: O que se deve ou não fazer? (parte 3)

By Tiago Frossard | 01/11/2007

É gente, depois de um bom tempo enrolado com problemas e mais problemas (aparentemente, até o meu MAC foi clonado), eu consigo finalmente disponibilizá esse código (com a ajuda do Douglas, claro). É o que dizem: “antes tarde do que nunca”. Falando sobre o código em si, tanto eu quanto o Mário achamos que ele ficou um cado complexo por causa da Controladora usando o Singleton. Pensei seriamente em tirar esse Singleton, mas resolvi deixá ela assim mesmo para que vocês tenham mais um exemplo do uso do padrão num programa. Basta deixar claro que o Singleton NÃO É NECESSÁRIO para o exemplo.

Vocês vão notar que eu deixei até as rotinas de debug (como o trace quando se passa o cursor sobre a bola) dentro da estrutura MVC. Além disso, vão também ver que cada camada do nosso Jogo está num pacote homônimo. Conseqüentemente, a estrutura de pastas também reflete essa lógica, organizando de forma muito melhor os arquivos.

Os comentários não estão muito explicados, mas quem tiver ainda alguma dúvida DEVE recorrer às partes 1 e 2 do artigo sobre o MVC, agora vendo como tudo acontece no código.

Bom, espero que isso ajude a vocês (especialmente ao Aryel que pediu o código). Qualquer dúvida, é só comentar!
Até a próxima!

Faça o download do código aqui!MvC (36)

MVC e o Linkage: O que se deve ou não fazer? (parte 2)

By Tiago Frossard | 20/10/2007

Agora que todos já sabem como funciona o MVC, vou continuar com a 2a e última parte do artigo. Hoje vou mostrar os pontos positivos e negativos da implantação da arquitetura, além de finalmente mostrar o que isso tudo tem a ver com o Linkage.

Pontos positivos:

  • Abstração e desacoplamento das camadas

Quando estamos programando a interface do problema, não nos preocupamos com a programação da lógica dele, somente com o que vai e o que vem dela. Dessa forma, podemos facilmente simular todo o funcionamento da lógica do programa com uma classe de testes que simula o funcionamento da lógica. Esse é o conceito de caixa preta, importantíssimo para o bom funcionamento de um software.

  • Facilidade de manutenção

Graças a esse desacoplamento, é muito mais fácil realizar a manutenção de um programa desses. Se for um problema visual, você vai à camada responsável pelo visual do programa e pronto, corrige. Se for um problema de lógica, é na lógica que você buscará a solução. Além disso, graças ao padrão Controlador (Controller), você pode apagar toda uma janela sem perder nada de sua implementação.

Quem está acostumado a adicionar código em um botão sabe exatamente o trabalho que isso ta poupando, mas para quem não está, aí vai um exemplo. Sabe esse Mario 2 que refizeram em 3D pro Nintendo DS? Se eles não usaram o MVC para fazer o original, perderam uma gigantesca parte da lógica do programa só por trocar a interface. Em compensação, usando o MVC de forma correta eles trocariam toda a interface sem mexer em 1 linha da lógica.

  • Possibilidade de Expansão

A estrutura de camadas proposta no MVC pode (e deve) ser expandida: criar mais camadas aumenta a coesão e diminui o acoplamento, organizando melhor o seu código. No jogo, por exemplo, além da Lógica e da Interface, temos a camada de Comunicação (rede) e a camada de Armazenamento (Banco de Dados), além das camadas entre elas. Um outro jogo pode, por exemplo, ter uma camada de IA, uma camada de hardware e uma camada de comunicação com outro jogo. O nosso, inicialmente, está assim:

piramide

As camadas se comunicam através de Indireções, como os já citados padrões Controlador, Proxy e DBBroker. Isso claro, pode mudar durante a análise de Casos de Uso mais avançados, mas inicialmente, essa é a idéia. Além disso, o funcionamento desses padrões vai ficar para futuros artigos.

  • Facilidade de realização de testes

Com o programa modularizado, podemos criar classes de teste que rodam nosso programa à exaustão, podendo encontrar bugs estatisticamente impossíveis de encontrarmos. Mas sabe qual é o melhor? Você pode testar isso tudo sem ter NADA de interface pronta: a lógica fica tão independente que chega a funcionar sem a interface. Então não precisamos esperar que o pessoal do desenvolvimento resolva aquele problema dos relatórios para que o pessoal do teste disseque nosso Caso de Uso. Maneiro, não?

Pontos negativos:

  • Programação complexa

A programação torna-se mais complexa quando aplicamos o MVC. Chamadas consecutivas e abstração do código são extremamente importantes. Além disso, uma documentação de todo o projeto é imprescindível para que as camadas sejam mapeadas e seguidas da forma correta. Além disso, teremos o…

  • Uso extensivo de padrões de projeto

O MVC simples já dita o uso do padrão Controller. Expandindo camadas de Comunicação e Armazenamento, ainda usaremos Proxies como o Remote Proxy e Database Brokers. Para desacoplar essas camadas, criaremos várias classes baseadas nos padrões Indireção (usado para desacoplar 2 classes que não deveriam ter visibilidade entre si) e Invenção Pura (padrão que adiciona classes que não estão diretamente ligadas ao problema em si, mas que facilitam a solução dele). No final, a relação entre as classes é bem mais burocrática

  • Dependência do MVC na portabilidade

Para poder portar um código MVC de forma correta, o programa que irá recebê-lo precisa trabalhar nos moldes do MVC. Por exemplo, se estamos portando uma janela de cadastro de cliente já pronta para um programa parecido, ele tem que estar modularizado de forma a trabalhar com a classe Controladora para que a manutenção seja mínima. Isso causa uma certa dependência à estrutura.

  • Queda de performance

As mensagens trocadas navegam entre camadas de forma burocrática e indireta, o que faz com que os programadores “performance acima de tudo” reclamem bastante. Por exemplo, uma chamada a uma função que seria direta numa programação estruturada torna-se uma cadeia de várias subchamadas a métodos que somente levam a chamada para a próxima camada nessa estrutura, como vocÊs viram no diagrama de seqüência lá em cima.

A performance perdida está longe de ser relevante, principalmente com os processadores de hoje em dia, mas mesmo assim continua sendo um ponto negativo da arquitetura.

“Ta, ta, eu entendi o MVC. Mas o quê que o Linkage tem à ver com isso???” O linkage do Flash é uma facilidade ao trabalhar com a interface, pois permite que uma classe use os atributos do MovieClip como se fossem atributos de si mesma. A grosso modo, parece muito uma herança de atributos e métodos públicos. O maior problema é que, se não tomarmos cuidado, acabamos destruindo toda a modularidade do MVC.

O linkage só deve ser usado para que as classes de interface controlem os MovieClips relacionados à elas. No nosso jogo, temos as classes TCarta e TCartaAvatar, ambas controlando uma carta em jogo. A diferença é que, seguindo o MVC, modularizamos uma carta em 2 camadas:

  • TCarta

Controla a lógica da carta: os atributos, as contas, o dano que ela recebe, se ela está no Deck, na Mão, em Jogo ou no Cemitério e coisas do gênero.

  • TCartaAvatar

Controla todos os efeitos visuais da carta. É ela que desenha a marcação do mouse sobre a carta, quem coloca a carta em qualquer posição, que inicia/pára o arrastar, que gera os efeitos de dano e desenha na tela todos os atributos buscados de TCarta.

Dessa forma, podemos trocar completamente a interface sem mexer nas classes de lógica. Trocar para Papervision 3D, a Plasticvision 4D, a Metalvision 5D ou até mesmo OpenGL ou ClosedLG, no nosso projeto, é muuuito mais simples: basta que criemos as mesmas classes de Interface, mas agora programadas com a nova interface. MOLEZA.

Essa portabilidade ainda pode ser da interface para a lógica: nossas cartas são arrastadas independente da lógica, elas brilham independente dlógica, elas se movem independente da lógica. Basta chamar os métodos da classe de Interface na hora certa, seja em Action Script 3.0 ou qualquer outra linguagem que o Flash suporte mais pra frente.

Caso uma única classe fosse responsável por isso tudo, durante uma troca de interface ou na hora de portar um trecho do código, a manutenção seria muito mais complicada: você deveria ficar movendo/apagando métodos das classes de lógica. Isso claro, pois estou pensando numa classe bem feita, com métodos bem estruturados. Muitas vezes, o que você encontra são linhas de interface no meio da lógica. Aposto que vários de vocês já viram um “se (this.morto) rode (“AnimacaoMorto”)”. Imaginem trocar o código para o futuro suporte OpenGL nesse caso…

Se vocês já pegaram o esquema do MVC e da expansão que fizemos, criando a camada de Armazenamento, já sacou que a carta também terá uma camada de armazenamento. Ela não está implementada ainda, mas seria mais ou menos assim:

  • TCartaDados

Seria a classe responsável por materializar e desmaterializar a Carta. Pra quem não sabe, materializar é buscar os dados de um objeto no BD e criá-lo em memória e desmaterializar é jogar no BD, destruindo o objeto da memória. Essa classe também seria responsável por todos os outros métodos possíveis

Gente, de todos os artigos que fiz até agora, esse foi de longe o que eu mais gostei de escrever. Espero, por meio desse, ajudar a derrubar essa história de que o Action Script é uma linguagem de 2a linha e que jogo em Flash é um amontoado de gambiarras. Espero também incentivar os leitores a escrever sobre qualidade de software em AS. Dá mais trabalho na hora de programar, mas esse trabalho é recompensado na hora de reutilizar o código em diversos outros projetos. Pensem nisso e até a próxima!

[EDIT] Não se esqueça de conferir o resto do artigo! Parte 1 e Parte 3, valeu?

WordPress Themes

Rec6plug

Search engine optimization by SEO Design Solutions