7 things that you have to know in Flash Lite and Java ME (portuguese)
É difícil escolher por onde começar e como escolher a liguagem ideal diante de tanta tecnologia disponível. Este pequeno guia visa demonstrar alguns pontos sobre o uso da tecnologia Flash Lite e Java ME, caso exista algum erro por favor me deixe informado (felipebzr[@][gmail].[com]).
Introdução
Com a diversificação e alterações nas características de cada dispositivo, fato este atrelado à necessidade do mercado em lançar aparelhos visando públicos distintos, é fácil identificar os problemas relacionados ao desenvolvimento de aplicativos e jogos para dispositivos móveis.
Inúmeros recursos e metodologias vêm sendo adotados para minimizar o tempo de migração entre vários dispositivos. Este artigo visa minimizar, através de exemplos, a curva de aprendizado entre programadores das tecnologias Adobe Flash Lite e Java ME. Escrevi alguns exemplos produzidos nas tecnologias Flash Lite 1.1, Flash Lite 2.x e Java ME MIDP 2.0, em breve estarei disponibilizando esse material.
Guerra entre gigantes
Um número crescente de dispositivos provendo suporte a várias tecnologias já é realidade no mundo dos smartphones, sendo este um fator determinante para o sucesso de um projeto onde o processo de escolha no momento de decisão em qual tecnologia adotar possa ser essencial.
O modo como cada uma das linguagens aborda a criação é em termos diferente, porém em alguns casos pode-se notar a existência de abordagens semelhantes. Os assuntos deste artigo destinam-se a criação de GUI’s, Games e aplicações baseadas no Flash Lite e no Java ME.
1. Fluxo de execução
Em Flash Lite, o controle do fluxo de execução baseado na timeline da aplicação é de fato um grande atrativo. A facilidade na manutenção e criação gráfica reduz a utilização de técnicas avançadas de abstração e controle de execução, sendo este um fator determinante para o bom desempenho em diversos dispositivos e plataformas.
Com Flash Lite a criação de jogos acontece de forma simples e divertida, porém o conhecimento da linguagem ActionScript faz-se obrigatório para jogos que requerem uma maior interatividade, o que não vem a ser um grande desafio para programadores C/C++ e Java, ou até mesmo para quem nunca programou.
Em Java, o controle do fluxo é baseado na criação e liberação de objetos (classes), sendo a classe Display responsável por gerenciar a exibição dos objetos em tela. Diversos artifícios vem sendo utilizados para simplificar a criação de jogos e interfaces de usuário escritas em Java, um bom exemplo disto é a GameCanvas, uma das principais classes do pacote Game API, da MIDP 2.0.
O conhecimento da programação orientada a objetos é de certa forma um conceito básico para criação de aplicativos em Java ME, porém existem casos que toda a abstração conseguida com a orientação a objetos precisa ser abandonada para o melhor desempenho e porting da aplicação para diversos dispositivos.
2. Desenhando Gráficos
Flash Lite
Criar aplicativos completamente desenvolvidos em Flash é possível através de uma única IDE, o Adobe Flash. O Adobe Flash, é o ambiente de desenvolvimento de gráficos vetoriais mais conhecido e utilizado para criação de aplicações com alto poder de interatividade e portabilidade. Tendo começado sua história em 1993, o Adobe Flash foi usado a princípio para fazer animações. Longe de apenas produzir simples animações, hoje é possível criar sistemas inteiros para diversas plataformas e dispositivos.
Java ME
Apesar dos problemas existentes com a fragmentação e o ambiente descentralizado de criação, o grande poder computacional aliado ao suporte dado à tecnologia em diversos dispositivos, ao constante trabalho para melhoria no desempenho e a adição contínua de novas funcionalidades faz do Java uma excelente escolha para criação de sistemas avançados para dispositivos móveis.
Para demonstrar a utilização de gráficos dinâmicos em ambas as plataformas, foi adotado como exemplo a rotação de uma bola desenhada em tempo de execução. Observe nos exemplos que em Flash Lite 1.1 foi utilizada a alternativa baseada na timeline da aplicação para movimentar a bola em torno de seu eixo, este mesmo exemplo foi criado em Flash Lite 2.x utilizando o evento onEnterFrame(), executado de acordo com frame rate da aplicação, e em Java ME MIDP 2.0 utilizando a classe Thread.
3. Fazendo seu jogo
Flash Lite
Em Flash Lite não existe nenhuma API específica para criação de games, mas o ambiente de criação aliado com a facilidade da linguagem de programação suprem a ausência de qualquer API específica.
Java ME
É através da Game API que encontramos a forma mais prática de construir jogos em Java ME. A Game API provê funcionalidades orientadas a jogos, simplificando o desenvolvimento e melhorando a performance da aplicação. Animar personagens com a Game API não é tarefa complicada, basta utilizar as funções da classe Sprite para obter um bom resultado.
4. Eventos de tecla
Em Flash Lite 1.1 e Flash 2.x tratar eventos de tecla é tarefa básica até para iniciantes. Nos arquivos de exemplo deste artigo é fácil encontrar a manipulação destes eventos.
Um dos grandes problemas encontrados por iniciantes na tecnologia Java é descobrir quais os valores correspondentes aos eventos de tecla em aplicações que utilizam a Canvas e eventos de baixo nível. Em Java ME não existe nenhum padrão específico para requisitar marcas, modelos e eventos de tecla para todos os dispositivos, logo, testar os jogos diretamente no dispositivo é requisito básico para estes casos.
Uma solução proposta para padronização é definir diretamente no JAD (Java Archive Description), para cada MIDlet/Dispositivo, códigos de tecla que sejam independentes dos padrões de mapeamento existentes na implementação de cada dispositivo.
5. Carregando dados externos
O GFC (Generic Connection Framework) é um Framework Java ME que provê suporte a uma ampla quantidade de conexões. GFC é nada mais que uma hierarquia de interfaces e classes para criar conexões (HTTP, Datagramas ou Streams) e executar I/O, provendo uma aproximação genérica para conectividade.
Flash Lite ainda não provê de um framework genérico de conexão, mas é possível carregar com facilidade dados externos através de funções como o loadVars (FL 1.1, FL 2.x), getURL (FL 1.1, 2.x) e loadClip vindo da classe MovieClipLoader (FL 2.x).
6. Persistência de dados
O Shared Objects é o sistema proposto pela tecnologia Flash Lite para armazenamento de dados em um conjunto de pares nome-valor. O limite de armazenamento pode ser consultado utilizando o método SharedObjects.getMaxSize().
Ler dados residentes em arquivos pode ser uma tarefa lenta, para assegurar que os dados estejam imediatamente disponíveis diante da requisição, Flash Lite 2.x utiliza manipuladores de eventos.
Em Flash Lite não é possível compartilhar o mesmo Shared Object entre vários arquivos SWF, sendo apenas utilizado por um único arquivo SWF de mesma versão, o arquivo é considerado de versão diferente quando ele é modificado do arquivo original, mesmo que haja alteração no nome, o arquivo continua sendo de mesma versão.
O RMS (Record Management System) é o sistema proposto pela plataforma Java ME para salvar dados em dispositivos com poucos recursos. O RMS é um banco de dados orientado a registros chamados de Record Store. Cada Record Store contém um conjunto de informações armazenados em um vetor de bytes e representados por um valor inteiro, que será sua identificação para qualquer operação, como atualização e remoção.
Cada Record Store é representado por um nome de até 32 caracteres Unicode (16 bits), e seu limite de armazenamento é a mesma quantidade de armazenamento que o dispositivo oferecer.
Na MIDP 2.0 é possível compartilhar record stores apenas entre os MIDlets da mesma suíte. Ao remover uma MIDlet do dispositivo também são removidos do aparelho todos os seus Record Store’s.
7. Conclusão
Este artigo discutiu o modelo de programação MIDP e Flash Lite, demonstrando vantagens e desvantagens em aplicações Java ME e Flash Lite. Os exemplos demonstrados neste artigo ilustram que mediante o levantamento das características, qualquer MIDlet ou suíte de MIDlets de médio porte pode ser reescrita em Flash Lite.
Através de um fácil modelo de interação, capacidades on-line e off-line, e acima de tudo, com bastante simplicidade, Flash Lite provê um rico conjunto de características que simplificam a construção de aplicativos wireless.
A combinação entre Flash Lite e Java ME pode abrir uma nova porta de possibilidades para novas aplicações e modelos de distribuição "over-the-air", porém através de um conjunto de características como a consistência da aplicação, o alto poder de personalização, baixa curva de aprendizado aliados ao baixo custo, fazem do Flash Lite uma excelente escolha para construção de aplicativos wireless de altíssima qualidade e portabilidade, sendo a plataforma chave para exercer de forma rápida a criação de aplicativos com um alto poder de personalização e qualidade.
August 3rd, 2007 - 13:19
Muito bom o post. Esclarece vários pontos para quem está a escolher que tecnologia usar. Um ponto que também poderia ser avaliado é a quantidade de dispositivos que suportam cada uma das tecnologias.
Expressei minha opinião em um post semelhante, mas não tão detalhado:
http://minds.flockin.com/suzuki/2007/04/03/questoes-tecnologicas-mobile/
Quanto aos eventos de tecla em J2ME, uma boa alternativa para conseguir que uma aplicação reconheça as teclas de todas as fabricantes é a seguinte: pode-se usar o método
System.getProperty(“microedition.platform”);
para reconhecer a plataforma e, em tempo de excução, determinar quais constantes (que variam de fabricante para fabricante) correspondem às teclas.
August 3rd, 2007 - 13:40
Obrigado Ângelo! Realmente, a quantidade de dispositivos passou despercebida, mas existe um post bastante interessante que pode ser utilizado como referência na questão de popularidade entre as tecnologia móveis. http://blog.masabi.com/2007/07/mobile-software-primer.html
Segundo a Sun, 8 em cada 10 dispositivos utilizam a tecnologia Java, o que de fato dá um empurrão enorme na popularidade da tecnologia. http://www.java.com/en/about/brand/power_of_java.jsp
Quanto aos eventos de tecla, quando me referi a definir no JAD os códigos de tecla (constantes) é exatamente para deixar o código mais enxuto e simplificado, evitando o uso do IF.