Desenvolvendo jogos com J2ME – Parte I v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}

Desenvolvendo jogos com J2ME – Parte I

Os primeiros passos

 

Iniciando uma série de artigos que abordam o desenvolvimento de jogos com J2ME, o presente artigo indica os primeiros passos nessa empreitada: uma introdução à arquitetura, às ferramentas utilizadas e ao processo de desenvolvimento.

 

Introdução

Segundo pesquisa recente da ABRAGAMES, o faturamento da indústria brasileira de jogos eletrônicos, somando-se software e hardware, foi de cerca de R$ 70 milhões em 2006, R$ 80 milhões em 2007 e deve fechar o ano de 2008 com cerca de R$ 90 milhões. Além disso, nota-se uma crescente participação das exportações nas empresas brasileiras, já que o mercado interno sofre muito com a pirataria. Para se ter uma idéia, em 2005, 30% de toda a produção nacional de jogos foi exportada, enquanto que, no ano de 2008, essa porcentagem deve fechar em torno de 43%. Os jogos para celular, por sua vez, são os principais propulsores do mercado brasileiro de jogos.

 

Entre as tecnologias para desenvolvimento de jogos para celulares, destaca-se o J2ME, também chamado de JavaME ou, ainda, JME. Trata-se de uma versão simplificada do Java, executada sobre uma máquina virtual Java reduzida, a KVM, que demanda menos recursos que a JVM (Java Virtual Machine).

 

O J2ME possui duas configurações básicas: CDC (Connected Device Configuration) e CLDC (Connected Limited Device Configuration). O CDC se destina a dispositivos com maior capacidade de processamento, o que permite a presença de recursos não disponíveis na configuração mais básica, o CLDC. Esta, porém, é a configuração utilizada pelos celulares, pagers e alguns PDAS (Personal Digital Assistant) menos poderosos, uma vez que tais dispositivos não dispõem de alto poder de processamento.

 

Uma vez definida a configuração, entra-se no âmbito dos perfis (profiles), responsáveis por determinar características mais específicas do dispositivo para o qual se está desenvolvendo. O profile, em conjunto com a configuration, fornece um conjunto de APIs para o desenvolvimento focado no grupo de dispositivos desejado. Assim, no caso do desenvolvimento de jogos e aplicações para celulares, utiliza-se a configuration CLDC (versão 1.0 ou 1.1) e o profile MIDP (Mobile Information Device Profile), na sua versão 1.0, 2.0 ou 2.1.

 

O MIDP 1.0 é compatível com quase todos os aparelhos ativos no Brasil, mas peca em não fornecer tantos recursos quanto a versão 2.0, principalmente no que tange à existência de componentes específicos para a criação de jogos e aplicações multimídia. Estudando-se o mercado brasileiro atual, conclui-se que a melhor escolha para o desenvolvimento de jogos com J2ME é usando o configuration CLDC 1.1 e o profile MIDP 2.0, que formam uma espécie de padrão da indústria de celulares no momento, dos mais baratos aos mais caros (alguns já suportam MIDP 2.1, mas a compatibilidade é retroativa, ou seja, um celular com suporte a MIDP 2.1 roda código MIDP 1.0 e também 2.0).

 

A Figura 1, desenvolvida pela Sun [SUN, 2008], fornece uma visão geral da plataforma Java. Nessa figura, é possível visualizar o JavaME. No caso dos celulares, a camada-base é a KVM. A camada de configuração, CLDC, está logo acima, sob a camada de perfil, MIDP. Por fim, sobre o MIDP, ainda podem existir pacotes opcionais, como os SDKs (Software Development Kit) da Nokia, por exemplo, fornecendo maiores facilidades para os desenvolvedores.

 

desjj2mep1fig01.JPG

Figura 1 [SUN, 2008]

 

Ferramentas

Para executar as aplicações desenvolvidas em J2ME no computador faz-se necessário o uso de um emulador. A Sun disponibiliza o WTK (Java Wireless Toolkit), um kit que facilita o desenvolvimento e os testes das aplicações J2ME no computador. O WTK conta com um emulador, documentação, exemplos diversos e ferramentas que permitem, entre outras coisas, monitorar o uso de memória da aplicação.

 

Em conjunto com o emulador, costuma-se utilizar uma IDE (Integrated Development Environment) para agilizar o processo de desenvolvimento. A IDE que será adotada no decorrer desta série de desenvolvimentos de jogos em J2ME é o NetBeans 6.5, que pode ser baixado gratuitamente em seu site oficial (www.netbeans.org). A principal razão para a escolha do NetBeans é a presença de ferramentas visuais que aumentam bastante a produtividade, tais como o Game Builder (muito útil para os jogos) e o Visual Mobile Designer (utilizado para a confecção de telas de aplicação bem como estabelecer o seu fluxo). Apesar dessas ferramentas não substituírem por completo a codificação, podem aumentar a produtividade consideravelmente, desde que usadas na medida certa. A Figura 2 mostra a IDE NetBeans 6.5 integrada ao emulador do WTK 2.5.2 (o NetBeans na sua versão Mobility ou na versão completa já possui o WTK). Pode-se visualizar, ainda, a existência de diversas cenas de um jogo, construídas com o Game Builder.

 

desjj2mep1fig02.png

Figura 2

 

O MIDlet

Uma aplicação J2ME é chamada de MIDlet, de forma análoga aos Applets (aplicações que são executadas no navegador) e os Xlets (aplicações de TV Digital). Os MIDlets são controlados por um gerenciador chamado de AM (Application Manager). A Figura 3, desenvolvida por Fonseca [FONSECA, 2005], demonstra o ciclo de vida de um MIDlet. Quando um MIDlet é invocado, o Application Manager faz uma chamada ao método startApp(), responsável por tornar o estado do MIDlet “ativo”, conforme pode ser visto na figura. No decorrer da execução, a aplicação pode ser pausada, seja por desejo do usuário ou por uma chamada ou mensagem recebida. Quando isso ocorre, é executado o método pauseApp() do MIDlet. A própria aplicação pode pausar a si mesma se necessário, utilizando o método notifyPaused(). Nesse momento, o estado da aplicação se torna “pausado”. Já quando a aplicação é finalizada, o método destroyApp() do MIDlet é invocado, seja por parte do AM ou da própria aplicação, utilizando o método notifyDestroyed(). Nesse caso, a aplicação entra no estado “destruído”. Percebe-se pela Figura 3, ainda, que do estado “pausado” pode-se retornar para o “ativo”, pois o método startApp() é novamente chamado após o fim da pausa. Outra possibilidade é que a aplicação pode ser finalizada, dirigindo-se diretamente do estado “pausado” para o estado “destruído”.

 

desjj2mep1fig03.gif

Figura 3 [FONSECA, 2005]

 

Classes do J2ME

A Figura 4, também desenvolvida por Fonseca [FONSECA, 2005], mostra a hierarquia de classes do J2ME ou, mais precisamente, do perfil MIDP. No maior nível da hierarquia, existe a classe Display, que representa a tela do aparelho. A classe Displayable, por sua vez, representa qualquer componente que possa ser exibido no Display e divide-se em dois grupos: as classes de alto nível (que herdam da classe abstrata Screen) e as classes de baixo/médio nível (representadas pela classe Canvas e, no MIDP 2.0, também por sua classe filha, a GameCanvas). A classe abstrata Screen contém quatro subclasses básicas: List, Form, Alert e TextBox. São consideradas de alto nível porque se comportam para o desenvolvedor como componentes apropriados para a criação de interfaces, no caso listas, formulários, mensagens de aviso e caixas de texto, respectivamente. Na outra vertente, a classe Canvas é a classe derivada de Displayable que representa o topo das classes de baixo/médio nível, por permitir um controle maior do dispositivo, permitindo ao programador moldar o display do aparelho livremente. Assim, é visível que a classe Canvas é de extrema importância para o desenvolvimento de jogos e, por isso, requer atenção especial. As demais classes, derivadas de Screen, apesar de serem mais voltadas para o desenvolvimento de aplicações gerais, também podem ser bastante úteis na criação de jogos, principalmente para a confecção de interfaces out-game: menus, telas de pontos, etc. No decorrer desta série, essas classes serão explicadas em detalhes, especialmente a Canvas e sua filha, a GameCanvas.

 

desjj2mep1fig04.gif

Figura 4 [FONSECA, 2005]

 

Próxima Etapa

Após este artigo introdutório da série, no qual foi apresentado o J2ME e as ferramentas que serão utilizadas para o desenvolvimento dos jogos, entrar-se-á na prática. O próximo artigo abordará a classe Canvas e sua derivada GameCanvas em detalhes, através do desenvolvimento de um exemplo de jogo clássico: o PONG. A idéia é que os conceitos possam ser passados à medida que o jogo é desenvolvido, tornando o processo de aprendizado divertido e intuitivo.

 

Referências

[FONSECA, 2005] Fonseca, Enrico. iMasters – Ciclo de vida do MIDlet. Disponível em: http://imasters.uol.com.br/artigo/3416/java/ciclo_de_vida_do_ midlet. Acessado em 13 de janeiro de 2008.

 

[SUN, 2008] Sun Microsystems – Sun Developer Network (SDN). JavaME Technology – Powering your Devices Everywhere. Disponível em: http://java.sun.com/javame/technology/index.jsp. Acessado em 13 de janeiro de 2008.