Você está na página 1de 37

Daniel Ricardo dos Santos Diogo de Campos Mauricio Oliveira Haensch

Desenvolvendo Jogos com Java ME

Daniel Ricardo dos Santos Diogo de Campos Mauricio Oliveira Haensch

Desenvolvendo Jogos com Java ME

o PET Computac a

U NIVERSIDADE F EDERAL DE S ANTA C ATARINA C ENTRO T ECNOL OGICO D EPARTAMENTO DE I NFORM ATICA E E STAT I STICA T UTORIAL P ROGRAMA DE E DUCAC AO

Licenc a:
o-Uso N Atribuic a ao-Comercial-Compartilhamento pela mesma Licenc a 2.5 Brasil

o, voc Para cada novo uso ou distribuic a e deve deixar claro para outros os termos da licenc a desta obra. es podem ser renunciadas, desde que Voc Qualquer uma destas condic o e obtenha permiss ao do autor. Nada nesta licenc a prejudica ou restringe os direitos morais dos autores.

Sum ario

o Introduc a 1.1 1.2 1.3 1.4 1.5 A plataforma Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Java Card . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Java Micro Edition (ME) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Java Standard Edition (SE) . . . . . . . . . . . . . . . . . . . . . . . . . . . Java Enterprise Edition (EE) . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 5 p. 5 p. 5 p. 6 p. 6 p. 6 p. 7 p. 7 p. 7 p. 7 p. 8 p. 9 p. 11 p. 12 p. 12 p. 12 p. 12 p. 13 p. 14 p. 14

Java ME 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que e 2.1.1 2.1.2 2.2 2.3 2.4 es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aplicac o Vantagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Principais diferenc as entre Java SE e Java ME . . . . . . . . . . . . . . . . . es e pers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Congurac o JCP e JSRs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Ferramentas de desenvolvimento 3.1 3.2 Sun Wireless Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IDEs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 3.2.2 NetBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Bibliotecas Java ME 4.1 Java SE x Java ME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4.2 5

Bibliotecas dispon veis . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

p. 14 p. 16 p. 16 p. 16 p. 17 p. 18 p. 18 p. 19 p. 20 p. 20 p. 21 p. 21 p. 22 p. 23 p. 26 p. 26 p. 26 p. 26 p. 29 p. 30 p. 33 p. 35 p. 36

Desenvolvendo para Dispositivos M oveis 5.1 5.2 5.3 Uso de mem oria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resoluc a es e pers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Congurac o

Desenvolvendo Jogos 6.1 6.2 6.3 6.4 6.5 A classe MIDLet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Displays e Displayables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sprites e Tiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.1 6.5.2 6.6 Sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . TiledLayer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Sons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Estudo de Caso - Liga Quatro 7.1 7.2 o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduc a Estrutura do c odigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eventos do menu principal . . . . . . . . . . . . . . . . . . . . . . . A classe TelaDoJogo . . . . . . . . . . . . . . . . . . . . . . . . . . A classe Bola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PlayTone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Bibliograa

Introduc a o

1.1

A plataforma Java

uma tecnologia que se estende muito al o. Java e em da pr opria linguagem de programac a Trata-se, na verdade, de uma plataforma de desenvolvimento. es da Sun MicrosysA plataforma Java compreende um conjunto de softwares e especicac o a sua comtems para o desenvolvimento de aplicativos. A grande vantagem desta plataforma e patibilidade n ao apenas entre sistemas operacionais, mas tamb em entre diversas arquiteturas, es desenvolvidas nesta plataforma variando de PDAs e set-top boxes at e servidores. As aplicac o tamb em s ao diversas, variando de aplicativos embarcados a jogos e aplicativos web. dividida em quatro diferentes edic es. Devido a essa grande variedade a plataforma e o o e composta de um pacote de softwares que permitem o desenvolvimento e a Cada edic a o de programas escritos na linguagem Java. execuc a As plataformas s ao desenhadas n ao para um processador espec co, mas para uma Java Virtual Machine (JVM) e um compilador com um conjunto de bibliotecas. A principal vantagem aumentar a portabilidade do c do uso da m aquina virtual e odigo.

1.2

Java Card

a edic o mais limitada da plataforma Java e e destinada a smart cards ou dispoJava Card e a a seguranc sitivos similares com pouqu ssima mem oria. Seu principal foco e a, com suporte ao encapsulamento de dados no aplicativo, rewall entre aplicativos e criptograa. Atualmente, encontra-se em desenvolvimento a vers ao 3 da plataforma.

1.3

Java Micro Edition (ME)

Voltada para dispositivos com pouca capacidade de processsamento e mem oria limitada, principalmente dispositivos m oveis. Muito usada em celulares e PDAs, estende-se tamb em para aparelhos como set-top boxes e Blu-ray players. Apresenta algumas diculdades no desenvolvimento devido a grande variedade de dispositivos e suas especicidades. detalhada no pr A plataforma Java ME e oximo cap tulo.

1.4

Java Standard Edition (SE)

a edic o usada para o desenvolvimento de aplicac es port E a o aveis de prop osito geral. Cont em es desktop e applets, como pacotes de ino que necess ario para o desenvolvimento de aplicac o o com bancos de dados, etc. terface gr aca, entrada e sa da, comunicac a Atualmente, encontra-se na vers ao 6.

1.5

Java Enterprise Edition (EE)

a maior das edic es de Java, compreendendo tudo o que est Java EE e o a presente na Standard es GlassFish. Voltada Edition al em de coisas mais espec cas, como o servidor de aplicac o es que rodam no lado do servidor e pensada para tornar as aplic es robustas, para aplicac o o usada para o desenvolvimento de aplicac es web e baseadas seguras, escal aveis e port aveis. E o na arquitetura orientada a servic os (SOA), como web services. Atualmente, encontra-se na vers ao 5.

Java ME

2.1

O que e

uma das edic es da plataforma Java e, como tal, e composta pela pr Java ME e o opria lingua o de APIs. gem, por uma M aquina Virtual e por uma colec a a mesma usada nas outras edic es, portanto e familiar para qualquer pessoa A linguagem e o que j a tenha programado Java em qualquer plataforma. Para se entender Java ME, ent ao, e o de APIs. necess ario conhecer a M aquina Virtual e a colec a es de m Java ME aceita diferentes implementac o aquinas virtuais e normalmente a m aquina denida pela Congurac o. virtual e a o da plataforma Java apresenta alguns elementos Al em desses elementos comuns, esta edic a es, que ser espec cos como Proles e Congurac o ao estudados adiante.

2.1.1

es Aplicac o

usado principalmente para o desenvolvimento em sistemas m E oveis e embarcados, alguns exemplos de sistemas que adotam Java ME s ao: Celulares; PDAs; Set-top boxes; Blu-ray players.

2.1.2

Vantagens

o bem especicado, Java ME apresenta diversas facilidades Por ter um campo de aplicac a para os desenvolvedores, tais como:

Portabilidade: Um aplicativo criado utilizando Java ME pode ser portado para diversos apare es. Isso e muito importante no desenvolvilhos, desde que sigam as mesmas especicac o mento para celulares, pois um mesmo aplicativo desenvolvido poder a rodar em modelos de diferentes fabricantes. Boa compatibilidade entre aparelhos: Como j a foi citado acima, desde que sigam as mesmas es, n especicac o ao h a grandes problemas de compatibilidade entre os aparelhos que ir ao rodar um aplicativo. Constante desenvolvimento: Assim como todo o resto da tecnologia Java, Java ME se encon es e capacidades sendo adicionadas tra em constante desenvolvimento, com novas func o a todo momento. Esse processo de desenvolvimento segue a JCP (Java Community Process), que ser a detalhado mais a frente. o: A plataforma conta com uma vasta documentac o online, no pr Boa documentac a a oprio site da Sun, al em de in umeros outros exemplos e tutoriais que podem ser encontrados em sites e f oruns. o desenvolvimento Desenvolimento integrado: Uma das principais vantagens de Java ME e integrado, proporcionado por ferramentas como o Wireless Toolkit (WTK) e IDEs como o NetBeans.

2.2

Principais diferenc as entre Java SE e Java ME

As principais diferenc as entre Java SE e Java ME s ao descritas a seguir: M aquina Virtual: As m aquinas virtuais utilizadas em Java ME s ao desenhadas para serem mais compactas e ecientes que a m aquina virtual utilizada em Java SE, por isso alguns recursos s ao perdidos. Numeros de ponto utuante: O suporte a ponto utuante s o foi adicionado na vers ao 1.1 do es para dispositivos mais antigos e poss CLDC, por isso ao desenvolver aplicac o vel que o num o desenvolvedor n ao encontre suporte para esta representac a erica. poss Reex ao: O pacote java.lang.reect s o est a presente no CDC. Por isso n ao e vel utilizar reex ao em dispositivos de menor capacidade. APIs de alto n vel (Swing e AWT): Algumas APIs de mais alto n vel, como as utilizadas para interface gr aca n ao est ao presentes em Java ME.

necess Acesso ao sistema de arquivos: Para se ter acesso ao sistema de arquivos e ario utilizar o espec o PDA Prole, ou uma implementac a ca de um fabricante. Grupos de threads: O suporte a grupos de threads, threads que podem ser manipuladas em provido pelo CDC. conjunto, tamb em s oe A gura abaixo mostra uma vis ao geral dos componentes de Java ME e como eles se relacionam as outras tecnologias Java:

2.3

es e pers Congurac o

es (Congurations) e pers (Proles) representam as congurac es e APIs As congurac o o m nimas dispon veis em um dispositivo m ovel. o m Cada aplicativo desenvolvido necessita de uma congurac a nima para ser rodado, e a o e fornecida pelo sistema de Congugarantia de que o dispositivo alvo ter a essa congurac a rations e Proles. o MIDP, que s As principais Congurations s ao o CDC e o CLDC e o principal Prole e ao explicados a seguir. a denic o de uma arquitetura, e dene v O MIDP e a arias APIs que devem estar dispon veis em uma plataforma para promover um ambiente de desenvolvimento para as suas MIDlets. A a introduc o de uma API para jogos, diferenc a mais importante entre o MIDP 1.0 e o MIDP 2.0 e a

10

o deste tipo de aplicativo. A maioria dos aplicativos desenvolvidos que facilita muito a criac a para dispositivos m oveis s ao capazes de rodar em plataformas MIDP 1.0, que devem ter as seguintes caracter sticas, entre outras: Tamanho da tela m nimo de 96x54pixels. Input atrav es de One handed keyboard ou Two handed keyboard ou Touch Screen. 128Kbytes de mem oria para os componentes MIDP. es. 8Kbytes de mem oria para dados das aplicac o 32Kbytes de mem oria din amica. baseado em aparelhos que seguem a congurac o CLDC, ou seja, os apareO MIDP 1.0 e a lhos compat veis com MIDP tamb em o ser ao com CLDC. Dispositivos CLDC (Connected Limited Device Conguration) s ao os aparelhos mais simples, que possuem uma interface menor e pouca mem oria e velocidade de processamento. Devem ter no m nimo as seguintes caracter sticas: 128Kb de mem oria para rodar a m aquina virtual. 32Kb de mem oria din amica. o em rede com baixa largura de banda. Comunicac a Baixa pot encia (para diminuir o gasto de energia). Dispositivos CDC (Connected Device Conguration) s ao aparelhos mais potentes que os CLDC e devem ter pelo menos as seguintes caracter sticas: 512Kb de mem oria para executar a m aquina virtual. 256Kb de mem oria din amica. o em rede com alta largura de banda. Capacidade para comunicac a ` persist Suporte a encia.

11

2.4

JCP e JSRs

um processo formalizado para que v O Java Community Process (JCP) e arias partes inte es e futuras vers ressadas colaborem no desenvolvimento de especicac o oes da plataforma Java. Entre os membros da JCP podemos encontrar operadoras de telefonia como a NTT DoCoMo, desenvolvedores de dispositivos m oveis como a Nokia, a Sony Ericsson e a Motorola, outras empresas e at e mesmo pessoas f sicas. es e tecnologias propostas s Os documentos descrevendo as especicac o ao chamados Java Specication Request (JSR). Esses documentos s ao publicamente revisados at e que um JSR se torne nal e seja votado pelo Comit e Executivo da JCP. o de refer Um JSR nal prov e uma implementac a encia, na forma de c odigo fonte e um o da API. Technology Compatibility Kit para vericar a especicac a descrito por um JSR, o JSR 215 de 2006. O pr oprio JCP e Os JSRs s ao especialmente importantes em Java ME, por causa do n umero de recursos novos e da velocidade com que mudam em dispositivos m oveis. Alguns exemplos de JSRs em Java ME: JSR 30: J2ME CLDC 1.0 JSR 37: MIDP 1.1 JSR 68: J2ME Platform Specication JSR 82: Bluetooth JSR 118: MIDP 2.0 JSR 133: Java Game Prole JSR 139: CLDC 1.1 JSR 184: Mobile 3D Graphics API for J2ME

12

Ferramentas de desenvolvimento

3.1

Sun Wireless Toolkit

uma ferramenta de aux es O Wireless Toolkit, ou WTK, e lio ao desenvolvimento de aplicac o o, func es de otimizac o em Java ME (CLDC e MIDP). O WTK possui exemplos, documentac a o a e um emulador para dispositivos m oveis. H a algumas IDEs (Integrated Development Enviroment, ou ambiente de desenvolvimento) o e que j a v em com o Sun Wireless ToolKit integrado, outras possuem plugins para integrac a poss es. tamb em e vel usar apenas o WTK para desenvolver suas aplicac o

3.2

IDEs

Duas IDEs j a bem conhecidas para desenvolvimento em Java (e tamb em em outras lingua o) s gens de programac a ao o Eclipse e o NetBeans. Ambos os ambientes suportam o desenvolvimento em Java ME e ser ao descritos com um pouco mais de caracter sticas a seguir.

3.2.1

NetBeans

O ambiente de desenvolvimento NetBeans se iniciou como um projeto de dois estudantes, e posteriormente foi comprado pela Sun Microsystems. Por aproximadamente um ano, a empresa manteve o ambiente como software propriet ario, mas ap os esse per odo o c odigo foi aberto e a partir disso foram surgindo muitas melhoras no ambiente em si e diversos plugins foram uma extens criados. Entre esses avanc os, surgiu o NetBeans Mobility Pack, que e ao da IDE para desenvolvimento com Java ME. O NetBeans Mobility Pack j a vem integrado com o emulador da Sun (WTK), al em de suportar outros emuladores. Essa extens ao tamb em tem algumas ferramentas que auxiliam no desenvolvimento para dispositivos m oveis, como algumas classes que podem ser utilizadas nas

13

es fora as padr a SplashScreen, suas aplicac o oes da biblioteca Java ME. Um exemplo disso e til para as aplicac es desenvolvidas. que estende a classe Canvas do Java ME e pode ser bem u o O Mobility Pack tamb em possui o Game Builder, que auxilia o desenvolvimento de jogos. Atrav es dessa ferramenta, ca mais f acil criar Sprites e Tiles para seu jogo, e o Game Builder o de cenas (combinac es de objetos est tamb em permite a construc a o aticos e din amicos) de uma o do seu jogo. maneira mais simples e r apida, ajudando na criac a es com JaAl em de todas as vantagens do ambiente para o desenvolvimento de aplicac o um ambiente gratuito e com boa documentac o, al vaME, e a em de um forte apoio da comunidade.

3.2.2

Eclipse

Existem plugins para a IDE Eclipse para desenvolvimento com Java ME. A grande van bem tagem de se desenvolver com esse ambiente s ao todas as facilidades do Eclipse, que e o de software em Java. poderoso e vers atil para gerac a o chaUm dos plugins existentes para desenvolvimento com JavaME no ambiente Eclipse e um pouco antigo e s mado EclipseME. Este plugin e o funciona com algumas vers oes tamb em antigas da IDE. Por em, existem diversos outros plugins que podem ser utilizados para desen es para a plataforma ME do Java. Esses plugins podem ser encontrados volvimento de aplicac o o de plugins, mas v na pr opria p agina da IDE Eclipse, na sec a arios deles s ao pagos.

14

Bibliotecas Java ME

4.1

Java SE x Java ME

O Java Micro Edition possui apenas um subconjunto dos componentes da Standard Edition, com uma m aquina virtual e algumas APIs mais limitadas. As APIs presentes no Java ME s ao de o de mem nidas no JCP (Java Community Process). A limitac a oria dos dispositivos que rodam Java ME acabou resultando na retirada de algumas das bibliotecas presentes no Java Standard Edition, para manter a plataforma pequena e adequada ao seu objetivo. Por em, o Java Micro o. Dependendo da congurac o e perl escolhidos, Edition n ao possui apenas uma especicac a a o. Com a evoluc o do poder de voc e pode utilizar diferentes APIs para desenvolver sua aplicac a a processamento e capacidade de mem oria dos dispositivos, surgem novas funcionalidades mais complexas atrav es dos JSRs. Como exemplo disso, podemos citar a aus encia de vari aveis do es e pers do Java tipo ponto utuante (como o double) em vers oes mais antigas de congurac o ` essa diferenc es, nem toda aplicac o desenvolvida em Java ME. Devido a a entre as duas edic o a SE funcionar a num dispositivo que roda Java ME.

4.2

Bibliotecas dispon veis

o resultam Como dito anteriormente, as APIs dispon veis para desenvolver a sua aplicac a o de congurac o e perl adotados pelo programador. Utilizando como exemplo da combinac a a a vers ao 1.1 do CLDC (Connected Limited Device Conguration), os pacotes presentes para o o s desenvolvimento da sua aplicac a ao: java.io java.lang java.lang.ref java.util

15

javax.microedition.io em relac o a ` Outra diferenc a de bibliotecas entre a Standard Edition e a Micro Edition e a es. O SWT e Swing da edic o padr interface das aplicac o a ao de Java n ao se encontram na vers ao ME. A Micro Edition conta com um novo pacote para este m, chamado java.microedition.lcdui, que pode ser encontrado em qualquer vers ao do MIDP. A vers ao 2.0 do MIDP cont em os seguintes pacotes: java.io java.lang java.util javax.microedition.io javax.microedition.lcdui javax.microedition.lcdui.game javax.microedition.media javax.microedition.media.control javax.microedition.midlet javax.microedition.pki javax.microedition.rms Como podemos notar, existe uma s erie de pacotes exclusivos do JavaME (os iniciados com javax.microedition). Assim, com a presenc a de alguns pacotes exclusivos, tamb em pode-se o escrita em Java ME funcionar armar que nem toda aplicac a a na plataforma Java SE.

16

Desenvolvendo para Dispositivos M oveis

5.1

Uso de mem oria

Os dispositivos para os quais se desenvolve em Java ME, em geral, possuem pouca mem oria, es desse tipo, juntamente com sendo isso um fator de risco para o desenvolvimento de aplicac o a capacidade de processamento. Para evitar isso, deve-se ter um cuidado maior para essa classe de software. o de estruturas de dados e tipos de dados mais simples e um bom comec A utilizac a o para reduzir o n reduzir o uso de mem oria. Outra sa da e umero de objetos criados, ou reduzir o o. As imagens utilizadas tamb tamanho dos objetos que s ao utilizados na aplicac a em s ao uma o que ocorre ao se utilizar mem grande fonte de Out of Memory Error, a excec a oria em excesso. Se mesmo com esses cuidados ainda existem problemas com mem oria, voc e pode usar um proler para auxiliar a encontrar usos desnecess arios ou inecientes de mem oria. Um Proler uma ferramenta que ajuda a encontrar bottlenecks da sua aplicac o, achando memory leaks e a es, e mais f e rastreando a vida dos objetos. Com essas informac o acil encontrar problemas na o que ocasionam os erros de uso de mem o. implementac a oria da sua aplicac a

5.2

o Resoluc a

es em Java ME possuem resoluc es de tela Os diferentes dispositivos que suportam aplicac o o preciso ter em mente alguma diferentes. Assim, na hora de desenvolver esse tipo de software, e muito mais o um pouco mais espec o. E resoluc a ca para a qual ser a desenvolvida a aplicac a o espec f acil desenvolver para uma resoluc a ca do que tentar fazer um software mais geral que es diferentes. rode em v arias resoluc o o diNormalmente s ao lanc adas algumas vers oes do software, cada uma para uma resoluc a

17

ferente. Isso tamb em ajuda na quest ao de capacidade do dispositivo. Geralmente dispositivos o da tela possuem uma capacidade de processamento e mem com uma mesma resoluc a oria pa o funcione em uma quantidade maior de aparelhos recidos, facilitando com que uma aplicac a m oveis ao ser desenvolvida especicamente para um conjunto de dispositivos similares.

5.3

es e pers Congurac o

o e sua vers A escolha da congurac a ao, assim como a vers ao do perl adotado pelo pro o, gramador, dever a levar em conta o dispositivo para o qual se est a desenvolvendo a aplicac a o sendo desenvolvida. Essa escolha acaba denindo assim como as funcionalidades da aplicac a o ir fundamental que se em que tipos de dispositivos a sua aplicac a a rodar. Por esse motivo, e es e pers suportados pelo dispositivo de destino da sua aplicac o. verique as congurac o a

18

Desenvolvendo Jogos

6.1

A classe MIDLet

` s aplicac es do MIDP, e deve ser estendida para que o A classe MIDlet corresponde a o es do dispositivo consiga controlar e modicar o estado das software que gerencia as aplicac o es (rodando ou pausada, por exemplo). A classe principal de sua aplicac es deve esaplicac o o tender a esta classe e implementar os m etodos utilizados para criar, comec ar, pausar e destruir o. A MIDLet funciona como uma interface entre o gerenciador de aplicac es e a sua a aplicac a o o. Essa comunicac o funciona atrav aplicac a a es de sinais enviados entre o software gerenciador o. do dispositivo e a aplicac a o, a classe MIDlet possui o m Para comec ar a sua aplicac a etodo startApp, que faz com que es. o estado atual se torne Active, enviando um sinal para o software gerenciador de aplicac o o ocorra durante a execuc o desse m o e destru Caso alguma excec a a etodo, a aplicac a da auto chamado. A aplicac o tamb maticamente e o m etodo destroyApp e a em pode ser pausada com o pauseApp, entrando no estado Paused. Nesse estado, o MIDlet deve liberar todos os recursos alocados. Al em dos m etodos que enviam um sinal ao MIDlet para a mudanc a de estado, h a tamb em es para informar da mudanc m etodos da classe que enviam um sinal ao gerenciador de aplicac o a o, como o notifyDestroyed e notifyPaused. Ao utilizar o notifyDesde estado da sua aplicac a troyed, por exemplo, o software gerenciador n ao ir a chamar o destroyApp, mas o pr oprio MI es que o m o, como a liberac o de Dlet deve ter realizado as mesmas operac o etodo de destruic a a recursos. o desses m Atrav es da combinac a etodos da classe MIDlet monta-se o ciclo de vida de sua importante manter correta a comunicac o. E o entre a aplicac o e o software gerenciaplicac a a a es, estando sempre atento a ` quest o de recursos e troca de sinais ador de aplicac o ao de liberac a para mudanc a de estado.

19

6.2

Commands

Os commands do Java ME s ao usados para gerar e tratar eventos. Por exemplo, um comando pode ser associado a um bot ao, ou imagem, de modo que, quando este for selecionado, ou clicado, o evento ser a disparado. o sem o, como pode ser visto pelos tipos Um command guarda a informac a antica de uma ac a respons de comandos existentes, mostrados mais abaixo. Desse modo, ele e avel apenas pelo sig` ac o propriamente dita. A ac o ca como responsabilidade da implementac o nicado, e n ao a a a a ` tela em o Command se encontra. de um CommandListener associado a Um comando deve ser criado da seguinte maneira: Command(String shortLabel, String longLabel, int commandType, int priority) o nome abreviado do comando, longLabel e o nome completo do coOnde shortLabel e o tipo do comando. H mando e commandType e a tamb em um outro construtor para objetos da classe Command, com a aus encia do par ametro longLabel. Os tipos poss veis do commandType s ao os seguintes: OK ITEM SCREEN HELP BACK CANCEL EXIT STOP importante se algum objeto disparar mais de um evento A prioridade de um comando s oe avaliado. de uma vez, neste caso, somente o comando de maior prioridade e Estes comandos devem ent ao ser tratados por uma classe que implementa a interface Como mandListener. Nesta classe ser a denido o m etodo commandAction que vai decidir que ac a disparado. deve ser tomada quando cada evento e

20

es de commands e CommandListeners podem ser encontrados Exemplos de implementac o o Estudo de Caso - Liga Quatro ou neste site: http://pt. no nal desta apostila, na sec a wikibooks.org/wiki/J2ME/Li%C3%A7%C3%B5es/CommandListener

6.3

Displays e Displayables

u nico por MIDlet e e o respons es relacionadas a ` tela do dispoO Display e avel por func o o deve utilizar o m sitivo. Para obter uma refer encia ao Display, a aplicac a etodo getDisplay. poss es importantes Atrav es dessa classe, e vel chamar m etodos para obter algumas informac o o, como o n para a sua aplicac a umero de cores do aparelho, ou at e mesmo se ele suporta cores. es do dispositivo, como vibrar, A classe Display tamb em possui m etodos para controlar func o atrav es do m etodo vibrate, e um efeito de luz do aparelho, com o m etodo ashBackLight. Um objeto s o possui a capacidade de ser inserido no Display ao estender a classe Displayable. Por em, um Displayable apenas tem capacidade para ter comandos, listeners, t tulos mostrado e a sua interac o com o usu denida e tickers associados a ele. Tudo que e a ario e o exemplo do Canvas. A utilizac o do Displayable e feita com atrav es de subclasse, como e a os m etodos setCurrent e getCurrent da classe Display, que troca e retorna o objeto do tipo Displayable atualmente na tela, respectivamente. o inicial do seu objeto Caso n ao seja denido nas subclasses do Displayable, a congurac a ser a: N ao vis vel no Display; T tulo null; Nenhum ticker associado ao Displayable em quest ao; Nenhum command existente; Nenhum listener para comandos.

6.4

Canvas

uma subclasse de Displayable, e e utilizada para objetos da sua aplicac o A classe Canvas e a es gr que precisam fazer alterac o acas na tela, ou receber eventos de teclas pressionadas no dispositivo. Em geral, os jogos utilizam muito essa classe, para poder interagir com o usu ario o de est o dos resultados desses est tanto na recepc a mulos quanto na apresentac a mulos.

21

respons Esta classe e avel por tratar eventos de entrada, como teclas pressionadas, soltas ou mantidas pressionadas (keyPressed, keyReleased e keyRepeated, respectivamente) e tamb em poss eventos com um pointer de um PDA (similares aos de tecla). E vel vericar qual das teclas foi pressionadas com o m etodo getKeyCode, mas em Java ME existe um artif cio que e o sistema de Game Actions. recomendado para os desenvolvedores de jogos, que e es port Os Game Actions s ao denidos para aplicac o aveis que utilizam as teclas de setas de um dispositivo e eventos relacionados a jogos. O MIDP prov e os seguintes Game Actions: UP, DOWN, LEFT, RIGHT, FIRE, GAME A, GAME B, GAME C e GAME D. Cada Game Action ` um pode estar a associado a mais de um Key Code, por em cada tecla s o pode estar associada a o pode traduzir um Key Code para um Game Action atrav Game Action. A aplicac a es do m etodo getGameAction e fazer o oposto atrav es de getKeyCode. Apesar de v arios Key Codes poderem retornado com este m estar associados ao mesmo Game Action, apenas um deles e etodo. o do Canvas e o controle gr exibido. Isso e feito atrav Outra func a aco do que e es do o em tela cheia, e o m setFullScreenMode, que tanto coloca quanto tira do modo de exibic a etodo til repaint, que renderiza o Canvas por completo ou apenas uma regi ao dele, art cio muito u rea sem alterac es. para reduzir o tempo gasto com processamento para repintar uma a o

6.5

Sprites e Tiles

Entre as bibliotecas do Java ME, existem as classes Sprite e TiledLayer, que s ao utilizadas para fazer os objetos animados e o fundo do seu jogo, respectivamente. Um Sprite, por o, e uma imagem ou animac o em duas ou tr sua denic a a es dimens oes que ser a utilizada para representar um objeto, e muitas vezes s ao usados para detectar colis oes ou fazer algum tipo o do jogo. J de interac a a os Tiles s ao usados para representar o fundo da tela, usualmente uma paisagem, um tabuleiro ou alguma cena de um jogo.

6.5.1

Sprites

dividido em v Para a classe Sprite, um arquivo de imagem e arios frames de tamanho igual, o. Para animar e voc e pode criar livremente uma sequ encia dos frames para gerar sua animac a sua sequ encia, s ao usados m etodos como o nextFrame, setFrame e prevFrame. Com esta classe poss rea de colis do Java ME tamb em e vel denir a a ao de um sprite, assim como vericar se houve colis ao entre dois sprites, entre um sprite e um Tile ou at e mesmo entre um sprite e uma imagem, utilizando m etodos como deneCollisionRectangle e collidesWith.

22

nica imagem com todos os frames Os Sprites em Java ME s ao produzidos a partir de uma u poss o. E que ser ao utilizados para renderizar a animac a vel fazer apenas um frame, mas nos dividida igualmente em frames de uma determinada largura e demais casos a imagem fonte e o e criada atrav do altura. A sequ encia da animac a es de uma Frame Sequence, que nada mais e que um array com os ndices dos frames gerados. denido por padr Um objeto do tipo Sprite pode ter um pixel de refer encia. Esse pixel e ao o (0,0) do sprite, podendo ser redenida para qualquer outra posic o, at como a posic a a e mesmo es que s fora dos limites do sprite. Esse pixel existe para permitir algumas operac o ao realiza es de rotac o e espelhamento do sprite. das baseadas em algum referencial, como transformac o a o. Segue abaixo um exemplo de sprite com um pixel de refer encia inuenciando na rotac a

Figura 6.1: Imagens retiradas de: http://java.sun.com/javame/reference/apis/jsr118/javax/


microedition/lcdui/game/Sprite.html

6.5.2

TiledLayer

Uma TiledLayer se trata de uma imagem composta de uma grade de c elulas, onde cada preenchida com uma imagem est o de imagens c elula e atica chamada tile. Essa composic a uma t menores permite economia de espac o, e e ecnica muito usada em diversos jogos de duas dimens oes. o na grade da TiledLayer recebe um ind associado um tile. Cada Cada posic a ce, ao qual e considerado est ` imagem que ele representa. Existe tamb um desses tiles e atico e ca ligado a em um tile virtual associado dinamicamente a ` um est um animated tile, que e atico. Com os tiles poss animados, ao se utilizar o mesmo animated tile em diversas c elulas da grade, e vel mud alas ao mesmo tempo apenas modicando o tile est atico ao qual eles est ao associados. A grade da TiledLayer possui um n umero de c elulas de mesmo tamanho distribu das por

23

o do objeto. As c linhas e colunas, denidas na criac a elulas da grade n ao podem receber mais de um tile por vez, mas v arias c elulas podem receber o mesmo tile. Para mudar o conte udo de uma das c elulas, podem ser utilizados os m etodos setCell e llCells.

6.6

Sons

o de O JavaME possui uma API respons avel por funcionalidades multim dia, como gravac a udio e v a deo, al em dos controle de sons. A Mobile Media API, ou MMAPI, funciona basicamente atrav es das classes Manager, Player e os controladores VolumeControl e ToneControl. utilizada para criar os Players. Isso pode ser feito atrav A classe Manager e es do m etodo createPlayer, onde voc e passa como par ametros um InputStream do arquivo de som que ser a tocado e o tipo (wave, midi, mp3, etc). Assim, voc e obt em um Player para tocar o som/m usica desejada e dever a controlar esse novo objeto para obter o efeito desejado. Alguns exemplos de formatos e as Strings que devem ser passados como par ametro para o createPlayer: Wave - audio/x-wav AU - audio/basic MP3 - audio/mpeg Midi - audio/midi Tone - audio/x-tone-seq O Player que foi obtido pode ser utilizado de uma forma simples, apenas chamando o m etodo start para que ele comece e pare ao chegar ao m da m dia especicada. InputStream stream = getClass().getResourceAsStream(sound_file); Player p = Manager.createPlayer(stream, format); p.start(); es, com a combinac o dos m O Player permite uma maior variedade de ac o a etodos da classe e o seu sistema de estados. Os estados da classe Player s ao: Unrealized, Realized, Started, es entre os estados Closed e Prefetched. A imagem abaixo mostra como s ao feitas as transic o atrav es dos m etodos mostrados nas echas presentes na gura.

24

es nem recursos neO estado Unrealized indica que o Player n ao possui nem informac o cess arios para funcionar. Realized indica que apenas os recursos n ao foram adquiridos ainda. O estado Prefetched signica que todos os recursos j a foram adquiridos. J a o estado Closed mostra o estado de um Player que j que o Player est a fechado e, por m, Started e a foi iniciado. Al em dos estados e dos m etodos para se trocar entre eles, a classe Player tem tamb em o da m es para m etodos para descobrir a durac a dia a ela atribu da, xar um n umero de repetic o a m dia e descobrir o estado atual, entre outros (getDuration, setLoopCount e getState, respectivamente). A Mobile Media API tamb em possui o Control, cujos objetos podem ser utilizados para es das m controlar algumas func o dias. Por exemplo, o Player suporta um VolumeControl, que pode ser utilizado para controlar o volume do a udio desse Player. Existe tamb em o ToneControl, respons que e avel por manipular sequ encias de tons monot onicos, uma outra forma de produzir o. sons para a sua aplicac a uma maneira bem mais simples de A classe Manager ainda possui o m etodo playTone, que e o e o volume, se colocar sons no seu jogo. Este m etodo recebe como par ametros a nota, a durac a til em diversos tipos e produz um tom monot onico como resultado. Este tipo de som pode ser u es, que n de jogos ou aplicac o ao necessitam de algo mais complexo do que pequenos tons para o ocupar muitos recursos da CPU, os efeitos sonoros. H a apenas o risco de esse tipo de soluc a

25

o de tons. que acontece apenas em casos de dispositivos que n ao possuem suporte para gerac a

26

Estudo de Caso - Liga Quatro

7.1

o Introduc a

o vamos falar um pouco sobre o jogo que n Nesta sec a os escolhemos para implementar na plataforma Java ME, o Liga Quatro. O jogo, tamb em conhecido em ingl es como Four in a Row, Four in a Line, ou pelo nome um jogo simples de tabuleiro para dois jogadores, que jogam em turnos registrado Connect 4, e alternados colocando suas chas em colunas com o objetivo de ser o primeiro a conectar quatro chas, seja na vertical, na horizontal ou em qualquer diagonal. Cada jogador escolhe uma depositada no primeiro espac coluna por turno e sua cha e o livre daquela coluna. Este jogo foi escolhido por dois motivos principais: a possibilidade de se comparar a o do jogo em Java ME e Java SE, ampliando o aprendizado da tecnologia em implementac a estudo, e a interface simples. o de implementac es se deu porque os bolsistas envolvidos A possibilidade de comparac a o j a estavam desenvolvendo o jogo em Java SE para a disciplina de Estruturas de Dados. Essa o permitiu uma an comparac a alise detalhada das diferenc a entre as duas tecnologias e as diculdades de se portar o c odigo para uma plataforma m ovel. ` baixa capaciUma das maiores diculdades foi modicar alguns trechos para se adaptar a dade de processamento e de mem oria dos dispositivos m oveis.

7.2
7.2.1

Estrutura do c odigo
Commands

Aqui est ao declarados os atributos da classe MidletL4 do tipo Command. O construtor do Command recebe como primeiro par ametro o texto que ser a mostrado ao usu ario para represen o tipo de comando, que pertence a um Enum (BACK, EXIT, tar o comando. Outro par ametro e

27

` prioridade HELP, OK, CANCEL, SCREEN, STOP, ITEM). O terceiro par ametro corresponde a o aos outros comandos da mesma tela, sendo o menor n do comando com relac a umero a maior prioridade. Neste caso, como todos t em a mesma prioridade, os comandos ir ao aparecer na ordem em que s ao adicionados. Com prioridades diferentes, os comandos cam listados por ordem de maior prioridade para menor, para facilitar o acesso do usu ario aos comandos mais importantes. private Command botaoIrParaMenu = new Command("Voltar", Command.BACK, 0); private Command botaoOK = new Command("OK", Command.OK, 0); private Command botaoSairDoJogo = new Command("Sair", Command.EXIT, 0);

A nossa classe MidletL4 implementa a interface CommandListener e precisamos implementar o m etodo commandAction. Assim, ele recebe um comando e a tela (Displayable) em que es para saber em qual o comando foi executado. No c odigo demonstrado, fazemos comparac o o poss tela o jogo se encontra atualmente. H a algumas telas em que s o existe uma ac a vel, como preciso saber qual comando foi executado, por exemplo as telas de Splash. Desse modo, n ao e j a que obrigatoriamente deveremos passar para a tela seguinte.

o e fechar o aplicativo, n Sempre que o comando botaoSairDoJogo for executado, a ac a ao importando em qual tela o jogo se encontra atualmente.

o que verica J a com o comando botaoIrParaMenu, podemos notar que existe uma condic a se o usu ario est a no meio do jogo. Caso isso seja verdade, o jogo ca pausado e a tela de menu recebe um novo bot ao Continuar Jogo. /** * Recebe os eventos que ocorreram, e a tela em qual ocorreu e * realiza a a ca ~o correspondente. * * @param comando * * O evento recebido. A tela na qual o evento ocorreu. * @param tela

28

*/ public void commandAction(Command comando, Displayable tela) { if (tela == telaSplashL4) { trocarTela(getTelaSplashPET()); } else if (tela == telaSplashPET) { trocarTela(getTelaMenu()); } if (tela == telaOpcoes) { setarOpcoes(); trocarTela(getTelaMenu()); } else if (comando == botaoSairDoJogo) { fecharMIDlet(); } else if (tela == telaVitoria || tela == telaDerrota || tela == telaEmpate) { trocarTela(telaMenu); } else if (comando == botaoIrParaMenu) { if (Controlador.getInstance().jogoNaoAcabou() && tela == telaJogo) { pausado = true; telaMenu.insert(0, getBotaoDeContinuarJogo()); } trocarTela(telaMenu); } }

As trocas de tela s ao feitas utilizando o m etodo abaixo: /** * Troca a tela atualmente exibida no celular. * * @param proximaTela

29

* */

Tela a ser exibida.

public void trocarTela(Displayable proximaTela) { display = getDisplay(); display.setCurrent(proximaTela); }

7.2.2

Eventos do menu principal

Os comandos executados na tela principal do jogo s ao tratados de forma um pouco diferente. ` bot pressiOs comandos foram associados a oes da telaMenu. Assim, toda vez que um bot ao e disparado e tratado por um ItemCommandListener. onado, emitindo um evento, o comando e /** * Cria um Listener para comandos nos itens do menu principal do jogo. */ private ItemCommandListener listenerDeItens = new ItemCommandListener() { public void commandAction(Command comando, Item item) { if (item == botaoDeNovoJogo) { Controlador.getInstance().resetar(); comecarNovoJogo(); if (pausado == true) { pausado = false; telaMenu.delete(0); //Remove a opcao de continuar o jogo } } else if (item == botaoDeContinuarJogo) { trocarTela(telaJogo); pausado = false; telaMenu.delete(0); } else if (item == botaoDeOpcoes) {

30

trocarTela(getTelaOpcoes()); } else if (item == botaoDeAjuda) { trocarTela(getTelaAjuda()); } else if (item == botaoDeSobre) { trocarTela(getTelaSobre()); } else if (item == botaoDeSair) { fecharMIDlet(); } } };

Como cada Item (bot ao) possui somente um comando, o m etodo s o precisa avaliar qual foi o item pressionado.

o de um comando a um bot Abaixo, temos um exemplo de associac a ao. Em seguida, associamos ao bot ao o ItemCommandListener mostrado no c odigo acima. botaoDeNovoJogo.addCommand(botaoOK); botaoDeNovoJogo.setItemCommandListener(listenerDeItens);

7.2.3

A classe TelaDoJogo

respons A classe TelaDoJogo estende GameCanvas e e avel pela tela principal do jogo, o das teclas pressionadas, atualizac o do que e mostrado na tela e efeitos incluindo detecc a a sonoros.

respons o da tela. Os par O m etodo abaixo e avel pela atualizac a ametros recebidos servem o de esforc para delimitar a regi ao que ser a redesenhada na tela, para quest oes de minimizac a o o do programa. O m o que em certos momentos da execuc a etodo ushGraphics chamado e rea desejada. atualiza na tela aquilo que estava no buffer dentro de a

31

/** * Atualiza uma parte da tela do jogo. * @param x * * @param y * * * */ public void refresh(int x, int y, int largura, int altura) { layer.paint(g, 0, 0); flushGraphics(x, y, largura, altura); } Posi c~ ao vertical em pixels onde come ca a a rea a ser atualizada. Largura em pixels da a rea a ser atualizada. Altura em pixels da a rea a ser atualizada. * @param largura * @param altura Posi c~ ao horizontal em pixels onde come ca a a rea a ser atualizada.

o de est denido recebendo o Para a detecc a mulos do usu ario, o m etodo keyPressed e detectar se o que foi passado c odigo da tecla pressionada como par ametro. O que fazemos e ` s teclas 4, 6 ou 5, que movimentam a cha do jogador para esquerda, para a direita corresponde a ou conrma a jogada, respectivamente. H a outro trecho condicional que verica se o c odigo da ` algum gameAction. tecla pressionada corresponde a

um mapeamento das teclas especiais de movimentac o um aparelho celular O gameAction e a o de teclas apresentados abaixo, e espec co para jogos. Assim, com os dois tipos de vericac a poss vel utilizar tanto as teclas num ericas quanto as direcionais para se jogar. /** * Detecta as teclas que s~ ao pressionadas durante o jogo. * @param keyCode * */ public void keyPressed(int keyCode) { switch (keyCode) { case KEY_NUM4: C odigo da tecla pressionada.

32

controle.clicouParaEsquerda(); return; case KEY_NUM6: controle.clicouParaDireita(); return; case KEY_NUM5: controle.clicouPraBaixo(); controle.animando = true; return; } switch (getGameAction(keyCode)) { case LEFT: controle.clicouParaEsquerda(); return; case RIGHT: controle.clicouParaDireita(); return; case DOWN: controle.clicouPraBaixo(); controle.animando = true; return; case FIRE: controle.clicouPraBaixo(); controle.animando = true; return; } }

posiciPara fazer a tela do jogo, s ao utilizadas v arias camadas. Cada camada adicionada e a situada na primeira posic o, e a da onada num array, e a camada mais pr oxima do usu ario e a ltima posic o e a que ca ao fundo de todas. Desse modo, o m u a etodo append insere a camada adicionada no nal do array e portanto mais ao fundo. Demonstrando o sistema de camadas da classe GameCanvas, no m etodo abaixo adicionamos primeiramente a grade transparente do

33

na verdade a camada que ca acima de todas na tela, em seguida as duas bolas tabuleiro, que e o das jogadas e por u ltimo o fundo com o tabuleiro totalmente pintado. usadas para a animac a Assim, as bolas cam na frente do fundo e por tr as das grades, o que cria o efeito das bolas deslizando para dentro do tabuleiro. /** * Junta as camadas com imagens do fundo, sprites e grade * transparente do tabuleiro da tela do jogo. */ private void juntarCamadasDeImagens() { layer.append(tabuleiro.getTabuleiroTransparente()); layer.append(bolaDeEscolha.getSprite()); layer.append(bolaAuxiliarDeAnimacao.getSprite()); layer.append(tabuleiro.getFundoDoTabuleiro()); flushGraphics(); }

7.2.4

A classe Bola

Os objetos da classe Bola possuem os sprites das chas utilizadas no jogo, assim como m etodos para operar sobre esses sprites.

o pr Este campo e oprio sprite, que vai ser utilizado nos m etodos da classe. private Sprite bola;

Segue abaixo a sequ encia que representa a ordem dos frames do sprite e serve para denir o da bola. Os n o do sprite. Neste a animac a umeros dos frames s ao denidos durante a criac a caso, ao executar a sequ encia (com o m etodo bola.nextFrame()), a bola parece estar caindo. private int[] sequenciaDeSaida = {0, 1, 2, 4}; bola.setFrameSequence(sequenciaDeSaida);

34

Para criar o sprite, passamos como par ametro a imagem contendo os frames desejados, e tamb em a dimens ao do sprite (neste caso, a altura e a largura s ao iguais). bola = new Sprite(imagemDaAmarela, diametro, diametro);

Abaixo temos o m etodo respons avel por mover a bola para a direita. O m etodo inicia to o atual da bola. A seguir, o sprite e atualizado para o u ltimo frame da sequ mando a posic a encia pintada na tela com o m do sprite, que representa uma imagem vazia. Essa imagem e etodo refresh da classe TelaDoJogo. Isso faz com que a bola suma na tela do usu ario. movido uma casa para a direita e o sprite e atualizado para o primeiro Logo ap os, o sprite e pintada novamente na tela com o frame da sequ encia, que cont em a bola cheia. Essa bola e mesmo m etodo, fazendo com que ela reaparec a. o, o m rea em que a bola est Por quest oes de otimizac a etodo refresh() pinta apenas a a a se o na movimentando, para n ao pintar desnecessariamente as regi oes em que n ao h a modicac a tela. /** * Move a bola para uma casa para a direita. */ public void moverParaDireita() { int x = bola.getX(); int y = bola.getY(); bola.setFrame(3); TelaDoJogo.getInstance().refresh(x, y, diametro, diametro); bola.move(diametro, 0); bola.setFrame(0); TelaDoJogo.getInstance().refresh(x + diametro, y, diametro, diametro); }

Este m etodo simples move o sprite x pixels no eixo x e y no eixo y.

35

public void mover(int x, int y) { bola.move(x, y); }

7.2.5

PlayTone

o de sons no jogo, optamos pelo uso do m Para a utilizac a etodo playTone. Este m etodo ` classe Manager do Java ME e e respons o pertence a avel por produzir um tom, dado sua durac a e a nota. Os sons presentes no Liga Quatro s ao produzidos ap os cada jogada e ao mostrar a tela de vit oria, derrota ou empate. Um exemplo pode ser conferido abaixo: /** * Toca o efeito sonoro da bola amarela. */ public void tocarEfeitoBolaAmarela() { try { Manager.playTone(79, 100, 100); Thread.sleep(100); Manager.playTone(77, 100, 100); } catch (InterruptedException ex) { ex.printStackTrace(); } catch (MediaException ex) { ex.printStackTrace(); } }

O m etodo playTone recebe como primeiro par ametro a nota, que deve ser um n umero entre calculada atrav 0 e 127 e e es de uma f ormula encontrada em http://java.sun.com/javame/ passada a durac o da nota em milisreference/apis/jsr118/. Como segundo par ametro, e a segundos. O terceiro par ametro do m etodo corresponde ao volume do tom, que deve ser entre 0 e 100. Assim, produzimos dois tons para o efeito sonoro da bola amarela, com uma pausa entre utilizado para que os tons produzidos n eles. O Thread.sleep e ao se sobreponham durante sua o. execuc a

36

Bibliograa

CLDC 1.1 http://java.sun.com/javame/reference/apis/jsr139/ MIPD 2.0 http://java.sun.com/javame/reference/apis/jsr118/ IDE Netbeans http://www.netbeans.org/ Sun http://www.sun.com/ Wikipedia http://en.wikipedia.org/wiki/Java_Community_Process Asked Questions List http://bellsouthpwp.net/m/c/mcpierce/javamefaq.html

Você também pode gostar