You are on page 1of 52

Faculdade de Tecnologia de Americana Curso Superior de Tecnologia em Desenvolvimento de Jogos Digitais

Gabriela Davila

Assinado de forma digital por Gabriela Davila DN: cn=Gabriela Davila, o, ou, email=gabidavila@gmail.com, c=BR Dados: 2012.06.24 20:50:03 -03'00'

CORONA SDK: UMA INTRODUO NO DESENVOLVIMENTO MVEL DE JOGOS COM FRAMEWORK MULTI-PLATAFORMA

GABRIELA DAVILA

Americana, SP 2012

II

Faculdade de Tecnologia de Americana Curso Superior de

CORONA SDK: UMA INTRODUO NO DESENVOLVIMENTO MVEL DE JOGOS COM FRAMEWORK MULTI-PLATAFORMA

GABRIELA DAVILA
gabidavila@gmail.com

Trabalho de Concluso de Curso desenvolvido em cumprimento exigncia curricular do Curso Superior de Tecnologia em Desenvolvimento de Jogos Digitais, sob a orientao do Prof. Benedito A. Cruz. rea: Jogos Digitais

Americana, SP 2012

III

BANCA EXAMINADORA

Prof. Benedito Aparecido Cruz (Orientador) Prof. Jos William Pinto Gomes Prof. Antonio Alfredo Lacerda

IV

AGRADECIMENTOS Gostaria de agradecer ao meu companheiro que insistentemente ficou me questionando do andamento desta monografia, ao meu professor orientador, e ao Professor Me. Cleberson Forte pelo incentivo.

DEDICATRIA Dedico minha Me.

VI

RESUMO O desenvolvimento para plataformas mveis est em alta nos ltimos 4 anos. E como o iOS e o Android praticamente dominam o mercado de smartphones, faz sentido utilizar uma ferramenta que possa unir as duas plataformas e economizar tempo de produo de um jogo, por isso o Corona SDK, existem outros frameworks multiplataforma, porm o Corona tem ganhado bastante destaque no ltimo ano devido a facilidade de programar nele. Espero que esse trabalho agregue mais conhecimento para a comunidade de jogos do Brasil, visto que h quase uma inexistncia de material em nossa lngua.

Palavras Chave: Corona, iOS, Android, Jogos

VII

ABSTRACT The development for mobile platforms is rising in the last four years. And as the iOS and Android practically dominate the smartphone market, it makes sense to use a tool that can unite the two platforms and save production time of a game, hence the Corona SDK, there are other frameworks multi-platform, but the Corona is gained enough prominence in the last year due easiness of programming it. I hope that this work adds more knowledge to the game development community in Brazil, since there is an absence of material in our language.

Keywords: Corona, iOS, Android, Games.

VIII

SUMRIO AGRADECIMENTOS ................................................................................................. IV

DEDICATRIA ............................................................................................................ V

ABSTRACT ............................................................................................................... VII 1.1 Requisitos Mnimos....................................................................................... 15

RESUMO .................................................................................................................... VI

1 INTRODUO ..................................................................................................... 13 1.2 1.3 O simulador................................................................................................... 16 Licenciamento ............................................................................................... 17

2 ESTRUTURA DE UM PROJETO ........................................................................ 20 2.1 2.2 O arquivo config.lua ...................................................................................... 20 2.3 O arquivo build.settings ................................................................................ 20 Adicionando um projeto ao simulador........................................................... 21

4.1

4 ELEMENTOS GRFICOS: OS DisplayObjects ................................................ 24 4.2 Principais propriedades ................................................................................ 24 4.3 4.4 Principais mtodos........................................................................................ 26 Manipulao de imagens e texto .................................................................. 27 Lidando com tamanhos diferentes de tela .................................................... 29

3 BREVE INTRODUO AO Lua.......................................................................... 22

4.3.1 Adicionar imagem ............................................................................... 27

4.3.2 Redimensionar imagens ..................................................................... 28 4.4.1 Redimensionamento automtico de contedo ................................. 30 4.4.2 Alinhamento automtico de contedo .............................................. 31 4.4.3 Redimensionamento automtico de imagem ................................... 31 4.4.4 Texto ..................................................................................................... 32

5 A API DE Physics ............................................................................................... 34 5.1 Configurando o Physics ................................................................................ 34

IX

5.1.1 Iniciando, pausando e parando physics ........................................... 34 5.2

5.1.2 Gravidade ............................................................................................. 35

5.1.3 Outros mtodos ................................................................................... 36

5.3

Colises ........................................................................................................ 38

5.3.1 O construtor physics.addBody .......................................................... 39

Corpos Fsicos .............................................................................................. 39

6 INSERO DE UDIO........................................................................................ 42 6.1 6.2 Carregando o udio ...................................................................................... 43 6.2.1 audio.play ............................................................................................. 44 Controle de udio.......................................................................................... 44

5.3.2 Sensores .............................................................................................. 41

6.2.2 Demais mtodos de controle ............................................................. 45

7 GERAO DA BUILD......................................................................................... 47 7.1 7.2 Executvel para o iOS .................................................................................. 47 Executvel para Android ............................................................................... 48

6.2.3 Controle de Volume ............................................................................. 45

8 LIMITAES ....................................................................................................... 49

9 CONSIDERAES FINAIS................................................................................. 50

10 REFERNCIAS BIBLIOGRFICAS ................................................................. 51

LISTA DE FIGURAS E TABELAS Figura 1 - Comparativo entre sistemas operacionais (NPD GROUP, 2011) ............. 14 Figura 4 - Janela de alerta exibida ao iniciar um jogo no Android, uma imagem

Figura 3 - Janela de registro do Corona (FERNANDEZ, 2012)................................. 17 Figura 5 - Estrutura de um projeto com Corona SDK ................................................ 20 similar a essa exibida no iPhone ..................................................................... 17

Figura 2 - Tela Corona SDK no Mac OS X (FERNANDEZ, 2012) ............................ 16

Figura 6 - Exemplo de cdigo em Lua ....................................................................... 23 Figura 7 - Exemplo de chamada de mtodos ............................................................ 26 Figura 8 - Aplicao de object.rotate()....................................................................... 27 Figura 9 - Imagem carregada via display.newImage() .............................................. 28 Figura 10 - Diversos dispositivos Android (ANIMOCA, 2012) ................................... 30 Figura 11 - Exemplo de redimensionamento de imagem dinmico........................... 32

Figura 12 - Exemplo de chamada de imagem dinmica ........................................... 32

Figura 13 - Criando o Physics namespace ................................................................ 34

Figura 14 - Redefinio de gravidade........................................................................ 35 Figura 16 - Influncia do acelermetro na gravidade (ANSCA, 2012) ...................... 36 Figura 15 - Recuperando valor da gravidade ............................................................ 36 Figura 17 - Modo debug (FERNANDEZ, 2012) ......................................................... 37

Figura 18 - Modo hybrid (FERNANDEZ, 2012) ......................................................... 37 Figura 21 - Exemplos de carregamentos de udio (FERNANDEZ, 2012) ................ 43 Figura 20 - Exemplos de tipos de corpos fsicos (ANSCA, 2012, traduo nossa).. 41

Figura 19 - Modo normal (FERNANDEZ, 2012) ........................................................ 38

Figura 22 - Caixa de dilogo (FERNANDEZ, 2012) .................................................. 47

Figura 23 - Caixa de dilogo (FERNANDEZ, 2012) .................................................. 48 Tabela 2 - Valores permitidos para xAlign e yAlign ................................................... 31 Tabela 1 - Comparativo entre licenas do Corona SDK ............................................ 18

Tabela 3 - Sintaxes de controle de udio .................................................................. 45

Tabela 4 - Controles de volume................................................................................. 46

XI

LISTA DE ABREVIAES E SIGLAS aac apk ANSI API BMP caf CPU EUA Ex/ ex GB GHz GIF JPEG JPG m MB MIT MPEG MP3 msi ogg OpenAL OpenGL PNG PUC s SI SDK RAM ROW TIFF v Advanced Audio Coding Android Aplication Package American National Standards Institute Application Programming Interface Bitmap Core Audio File Central Processing Unit Estados Unidos da Amrica Exemplo Gigabyte Gigahertz Graphics Interchange Forma Join Photographic Experts Group Join Photographic Group Unidade de metro Megabyte Massachusetts Institute of Technology Moving Picture Experts Group MPEG-1/2 Audio Layer 3 Microsoft Installer Ogg Vorbis Audio Open Audio Library Open Graphic Library Portable Network Graphics Pontifcia Universidade Catlica Unidade de Segundo Sistema Internacional Software Development Kit Random Access Memory Rest of the world Tagged Image File Format verso

XII

wav

WAVEform audio format

13

INTRODUO Ao longo dos anos a distribuio de jogos e aplicativos para dispositivos

mveis era feita de acordo com os contratos com as operadoras de celulares. Ao qual o sucesso de um aplicativo era diretamente interligado com o tamanho da empresa e o peso do acordo comercial. Desta maneira grandes desenvolvedoras conseguiam grandes destaques nos portais de vendas. Esse cenrio mudou e popularizou o desenvolvimento de software mobile com o lanamento da Apple App Store em julho de 2008. Segundo Mary Meeker (2010), analista para Morgan Stanley, esse crescimento constante dos smartphones a partir de 2008 foi um pouco mais de 20% de penetrao no mercado de celulares no Reino Unido e nos Estados Unidos da Amrica e que no resto do mundo (ROW) essa taxa de 20% s chegar a ser verdade no final de 2012. Um desenvolvimento de software para celulares engloba utilizar ferramentas e APIs especficas para cada plataforma. O foco aqui poder utilizar uma ferramenta para desenvolvimento que permita gerar um universal, um executvel, para o sistema operacional escolhido. Os sistemas a serem destacados nesse texto so o iOS e o Android, visto a posio das duas ferramentas no marketshare atual. E que todas as outras plataformas juntas no ultrapassam 10%. Segundo o NPD GROUP (ALLEN; GRAUPERA; LUNDRIGAN, 2010, p. 10) a RIM no Q2 de 2006 tinha 50% de todas as vendas de smartphones. Porm no Q3 de 2011 a sua expressividade era de 8%. A Nokia numa tentativa tardia de voltar ao mercado, fez uma parceria com a Microsoft em 2011 e espera recuperar seu sucesso entre a consistncia do iPhone e a flexibilidade do Android.

14

Figura 1 - Comparativo entre sistemas operacionais (NPD GROUP, 2011)

Com base nesses dados, percebe-se que caso um jogo ou aplicativo seja desenvolvido para mais de uma plataforma, ele poder alcanar quase 91% do mercado de celulares, por isso o desenvolvimento multiplataforma fica como uma das opes caso no seja vivel a produo de dois aplicativos distintos. Ser abordado aqui o Corona SDK voltado para iOS e Android, como possvel fazer essa programao multi-plataforma com o uso das principais APIs do Corona.

15

SOBRE O CORONA SDK O Corona SDK pertence a Ansca Mobile e foi fundada em 2008 por um time de programadores que antes trabalharam e contriburam para softwares como Illustrator, Photoshop e Flash Authoring para a Adobe e Apple. A plataforma foi lanada em Setembro de 2010 e atualmente o software encontra-se na verso 2011.704, sua numerao sempre leva em considerao o ano da build. O SDK gera aplicaes para 4 plataformas: iOS, Android, Kindle Fire e Nook. Estes ltimos dois so possveis somente porque a base do sistema operacional uma verso modificada do Android. 1.1 Requisitos Mnimos Segundo a Ansca Mobile, o mnimo necessrio para instalar o Corona : No Macintosh: Mac OS X 10.6 ou superior Processador Intel CPU 64 bits Sistema grfico OpenGL 1.4 ou superior Xcode para Mac OS X Assinatura no Apple Developer Program (necessrio para testar seus aplicativos no seu dispositivo) Editor de Texto

No Windows: Windows 7, Vista ou XP Processador de 1GHz (recomendado) 38 MB de disco livre (mnimo) 1 GB de memria RAM (mnimo) Sistema grfico OpenGL 1.3 ou superior (disponvel nas verses mais recentes do Windows) Java 6 SDK Editor de Texto

16

Uma observao pertinente ao criar jogos para iOS que mesmo o Corona SDK ter uma verso para Windows apesar de o desenvolvimento nessa plataforma ser suportado, o build deve ser realizado no Macintosh, pois no existe SDK do iOS para o Windows. Ele adiciona uma camada a mais no desenvolvimento de jogos ou aplicativos para celulares. No caso, como ele usa Lua como linguagem de programao, o trabalho do Corona traduzir essa aplicao para o iOS ou o Android. 1.2 O simulador O Corona SDK est disponvel para instalao no endereo

http://www.anscamobile.com/corona/. necessrio estar registrado no site para transferir o arquivo. A instalao do simulador segue os passos padres de qualquer aplicao, no Mac OS X basta apenas arrastar a pasta Corona SDK para a pasta Applications (Figura 2):

Figura 2 - Tela Corona SDK no Mac OS X (FERNANDEZ, 2012)

A instalao no Windows feita a partir de um arquivo .msi transferido do site da Ansca Mobile. Deve-se clicar duas vezes no arquivo e seguir as instrues exibidas na tela.

17

Em ambos os sistemas operacionais, necessrio ao executar o simulador pela primeira vez, informar os dados cadastrados no registro (Figura 3):

Figura 3 - Janela de registro do Corona (FERNANDEZ, 2012)

1.3

Licenciamento O Corona um software que trabalha com o modelo de assinatura. A licena

paga anualmente e todas as atualizaes futuras podem ser baixadas sem custo adicional. Isso significa que alm das licenas de SDK de plataforma (Apple, Google) necessrio pagar um valor a eles tambm. At a presente data, existem 3 modelos de assinatura: Indie (iOS only), Indie (Android only) e Pro (all platforms). A assinatura necessria caso o programador queira publicar o aplicativo nas lojas oficiais. A verso trial insere uma marca dgua no jogo:

Figura 4 - Janela de alerta exibida ao iniciar um jogo no Android, uma imagem similar a essa exibida no iPhone

18

E assinantes tm prioridade na hora de fazer o build da aplicao, entende-se por build o executvel que ser gerado para o sistema operacional escolhido, alm de ter um tamanho de arquivo otimizado, acesso a fruns exclusivos e apoio promocional do aplicativo no momento do lanamento. A Tabela 1 na prxima pgina apresenta uma listagem detalhada dos itens presentes em cada tipo de licena.
Tabela 1 - Comparativo entre licenas do Corona SDK Descrio Testar e visualizar os aplicativos no simulador do Corona para Desktop Instalar e testar os aplicativos em seu iPhone pessoal, iPad iPod touch, Android e dispositivos Acesso ilimitado a todas as APIs simples e poderosas do Corona O acesso prioritrio a novos recursos a partir do momento que eles tornam-se disponveis em Daily Builds Prioridade na compilao, at 5x mais rpido Tamanho otimizado do aplicativo Sem marca dgua Fruns exclusivos para assinantes Corona Analytics Recursos Promocionais e divulgao do aplicativo pela Ansca Mobile Distribuir para a iTunes App Store, Android Marketplace, Amazon Kindle Fire Appstore, e Barnes & Noble NOOK Color Appstore Trial Sim Pro Sim

Sim

Sim

Sim

Sim

No No No No No No No

Sim Sim Sim Sim Sim Sim Sim

No

Sim

O Corona SDK promete diminuir consideravelmente o ciclo de criao de software, porque elimina a complexidade do Objective-C, no caso do iOS, e a dificuldade de programar em Java, no caso do Android. Isso alcanado usando a linguagem de programao Lua, que amplamente usada no desenvolvimento de jogos digitais. O Cientista da Computao, Daniel Nations (2011) refere-se plataforma da seguinte maneira:

19

O que ele faz cortar drasticamente em tempo de programao. No h nenhuma maneira que eu posso enfatizar isto o mximo: o que pode levar centenas de linhas de cdigo para fazer em Objective-C s pode ter algumas linhas de cdigo para realizar na Lua. E porque o Corona SDK mantm o controle de seu modelo de memria prpria, voc no precisa se preocupar sobre como inicializar objetos ou remov-los da memria quando feito com eles.

20

ESTRUTURA DE UM PROJETO Um projeto no Corona SDK pode ter apenas um arquivo principal, chamado

main.lua. Arquivos adicionais para deixar o projeto mais organizado e desacoplado podem ser adicionados a medida que for necessrio.
Outros arquivos podem opcionalmente compor um projeto, os principais so: config.lua, e build.settings. A

Figura 5 abaixo exibe a estrutura mais bsica de um projeto, o arquivo em vermelho, main.lua, o arquivo obrigatrio do projeto e os arquivos em cinza so opcionais.

Figura 5 - Estrutura de um projeto com Corona SDK

2.1

O arquivo config.lua Este arquivo contm informaes referentes ao runtime e acessado pelo

aplicativo em tempo de execuo. A principal informao contida nesse arquivo referente tamanho da tela e redimensionamento. 2.2 O arquivo build.settings Apesar de ter a extenso diferente dos restantes, esse arquivo usa a sintaxe da linguagem Lua e nele devem ser inseridas instrues para serem usadas na hora do build.

21

2.3

Adicionando um projeto ao simulador Para visualizar o projeto no simulador do Corona, necessrio apenas abrir o

arquivo main.lua pelo caminho: File > Open. Os demais arquivos sero diretamente ou indiretamente adicionados ao simulador devido a este arquivo.

22

BREVE INTRODUO AO Lua Lua uma linguagem interpretada, de tipagem dinmica com seu

interpretador escrito em ANSI C. Alm disso, uma linguagem de cdigo aberto e gratuita sob a licena MIT. Assim como o Java, o Lua, roda sobre uma mquina virtual e tem gerenciamento de memria automtico com um garbage collector. Ele gera um bytecode, e esse recurso permite que o cdigo possa ser interpretado em um grande conjunto de hardware dado ao fato do seu cdigo final ser nico. A linguagem foi criada por um time da PUC-Rio e usada amplamente no desenvolvimento de jogos digitais e vrios outros tipos de softwares como Apache HTTP Server, Adobe Photoshop Lightroom, entre outros. Jung e Brown (2007) opinam que:
[...] Lua tem caractersticas que suportam os requisitos avanados de programas. Ele impe muito poucas convenes sobre a maneira como voc escreve seu cdigo, ele fornece mecanismos com os quais voc pode construir solues claras e de fcil manuteno para suas tarefas de programao. At mesmo os programadores mais experientes encontram novas formas poderosas de usar Lua para estender e simplificar suas aplicaes. Lua robusto, mas sua leve curva de aprendizagem o torna bastante adequado como primeira linguagem de programao. Em conjunto, estas caractersticas fazem de Lua uma linguagem atraente para os estudantes e profissionais.

A sintaxe do Lua semelhante a do Javascript e ActionScript. Para mais informaes sobre a linguagem, por favor acesse o portal http://www.lua.org. O Lua tem 3 tipos de variveis: variveis locais, variveis globais e campos de tabelas. O que diferencia uma varivel global de uma varivel local praticamente o escopo, possvel adicionar um bloco de cdigo e manter a validade de uma varivel local somente dentro desse bloco. Variveis locais so iniciadas com o comando local, a ausncia dessa instruo, torna a varivel global. (PUC-RIO) Fernandez (2012, traduo nossa) caracteriza por sua vez, os campos de tabela so os prprios elementos das tabelas. Caso seja utilizado nmeros inteiros como ndice dessa tabela, ela tratada como uma matriz, caso seja utilizado strings

23

ela passa ser tratada como uma propriedade. Um exemplo dos tipos de variveis pode ser encontrado na Figura 6.

Figura 6 - Exemplo de cdigo em Lua

Note que o operador ponto foi utilizado pra acessar a propriedade de dentro da tabela e que quando a tabela visto como uma matriz, usa-se as chaves. possvel usar tambm as chaves para acessar uma propriedade tal como na matriz.

24

ELEMENTOS GRFICOS: OS DisplayObjects Cada elemento carregado na tela do seu dispositivo uma instncia da classe

DisplayObject. No se cria esses objetos diretamente com o uso do comando new como acontece normalmente com as linguagens orientadas a objetos. O que na verdade criado um tipo de DisplayObject cada vez que o mtodo para retngulos, crculos, imagens e texto so chamados. Nesse caso existem construtores para cada um desses tipos de objetos, por exemplo, display.newRect() cria um VectorObject, no caso um objeto vetorial. Atualmente, cada vez que um desses construtores so executados, eles implicitamente adicionam como classe pai o cenrio atual. Porm, existe apenas um cenrio no Corona, para poder deixar o conjunto de objetos um pouco mais organizado, pode se usar o parmetro parentGroup, para definir um grupo como o pai desses objetos (FERNANDEZ, 2012, traduo nossa). 4.1 Principais propriedades Conforme demonstrado anteriormente, o operador ponto deve ser usado para acessar essas propriedades. Uma vez atribudo a uma varivel um DisplayObject. Qualquer uma das propriedades a seguir podem ser utilizadas para modificar o objeto (FERNANDEZ, 2012, traduo nossa):
object.alpha: altera a opacidade do objeto, varia de 0 a 1. object.height: retorna a altura do objeto em coordenadas locais. object.isVisible: controla se o objeto visvel na tela ou no, true para que seja visvel e false para que no. O valor padro true. object.isHitTestable: permite a um objeto a continuar a receber eventos de toque (hit) mesmo que no esteja visvel. Se true, o objeto receber os eventos de toque independentemente da visibilidade; se false, eventos apenas afetaro objetos visveis. O valor padro false. object.parent: retorna o pai do objeto, essa propriedade imutvel.

25

object.rotation: retorna o ngulo de rotao atual em graus. Pode ser negativo ou positivo. O valor padro 0. object.contentBounds: uma tabela de propriedades com os valores de xMin, xMax, yMin e yMax. Geralmente usado para mapear um objeto em um grupo para as coordenadas de tela. object.contentHeight: coordenadas de tela. retorna a altura do objeto em

object.contentWidth: retorna coordenadas de tela.

largura

do

objeto

em

object.width: retorna a largura em coordenadas locais. object.x: especifica a posio no eixo x do objeto em relao ao pai a origem do pai, especificamente. Ao alterar esse valor, o objeto ir se mover no eixo x. object.xOrigin: especifica a posio no eixo x de origem do objeto em relao origem do pai Ao alterar esse valor, o objeto ir se mover no eixo x. object.xReference: define a posio no eixo x do ponto de referncia em relao ao local de origem do objeto. Para a maioria dos objetos de exibio, o valor padro 0, ou seja, a posio no eixo x da origem e o ponto de referncia so os mesmos. object.xScale: obtm ou define o fator de dimensionamento X. Um valor de 0,5 ir dimensionar o objeto a 50 por cento na direo do eixo x. O dimensionamento ocorre em torno do ponto de referncia do objeto. O ponto de referncia padro para a maioria dos objetos de exibio o centro. object.y: especifica a posio no eixo y do objeto em relao ao pai a origem do pai, especificamente. Ao alterar esse valor, o objeto ir se mover no eixo y. object.yOrigin: especifica a posio no eixo y de origem do objeto em relao origem do pai Ao alterar esse valor, o objeto ir se mover no eixo y. object.yReference: define a posio no eixo y do ponto de referncia em relao ao local de origem do objeto. Para a maioria dos objetos de exibio, o valor padro 0 (zero), ou seja, a posio no eixo y da origem e o ponto de referncia so os mesmos. object.yScale: obtm ou define o fator de dimensionamento Y. Um valor de 0,5 ir dimensionar o objeto a 50 por cento na direo do eixo y. O dimensionamento ocorre em torno do ponto de referncia do objeto. O ponto de referncia padro para a maioria dos objetos de exibio o centro.

26

4.2

Principais mtodos Em Lua os mtodos de objetos podem ser chamados de duas formas: ou

usando o operador ponto, ou o operador dois pontos. A Figura 7 abaixo ilustra as duas formas.

Figura 7 - Exemplo de chamada de mtodos

A seguir uma lista de mtodos que so nativos do DisplayObjects (FERNANDEZ, 2012, traduo nossa):
object:rotate(deltaAngle): adiciona uma quantidade delta em graus ao objeto para rotacionar. object:scale(sx, sy): multiplica XScale e yScale propriedades por sx e sy respectivamente. object:setReferencePoint(referencePoint): define o ponto de referncia tanto para o centro do objeto (padro) ou para um dos vrios pontos convenientes ao longo da caixa delimitadora do objeto. O referencePoint argumento deve ser uma dos parmetros abaixo: o o o o o display.CenterReferencePoint display.TopLeftReferencePoint display.TopCenterReferencePoint display.TopRightReferencePoint display.CenterRightReferencePoint

27

o o o o

display.BottomRightReferencePoint display.BottomCenterReferencePoint display.BottomLeftReferencePoint display.CenterLeftReferencePoint

object:translate(deltaX, deltaY): acrescenta deltaX e deltaY para as propriedades x e y, respectivamente. Isto ir mover o objeto de sua posio atual. object:removeSelf(): remove o objeto da exibio na tela e libera o espao usado na memria, assumindo que no h outras referncias a ele.

Abaixo na Figura 8uma aplicao do mtodo object.rotate():

Figura 8 - Aplicao de object.rotate()

4.3

Manipulao de imagens e texto

4.3.1 Adicionar imagem Adicionar imagens ao Corona uma tarefa bem simples, atravs do mtodo construtor display.newImage(filename, [,base directory] [, left, top]), onde filename o nome da imagem (ex.: fundo.png), base directory representa o caminho relativo do arquivo, deve-se ter em mente que esse caminho relativo raiz do projeto. E por fim, top e left so dois parmetros de coordenadas que devem ser informados juntos, caso informado, a imagem ir ser posicionada no local informado, caso no seja informado, a imagem ser centrada sob sua origem.

28

Figura 9 - Imagem carregada via display.newImage()

Tipos suportados de imagem so o JPG e PNG os demais tipos como BMP, TIFF e GIF no so suportados. No caso do GIF o Corona carrega a imagem, porm caso haja transparncia na imagem, ela no suportada no dispositivo, uma outra observao em relao ao JPG, Fernandez (2012, traduo nossa) no recomenda o uso de imagens JPG:
[...] Evite alta compresso no JPG, pois pode demorar mais para carregar em um dispositivo. Arquivos PNG tm melhor qualidade sobre JPG e so usados para exibir imagens transparentes. JPG no salvam imagens transparentes.

4.3.2 Redimensionar imagens Ao adicionar uma imagem maior que a rea de exibio, o comportamento padro do Corona redimensionar a imagem para que ela caiba na tela. Isso ocorre como uma maneira de preservar memria, porm, nem sempre necessrio que a imagem seja redimensionada, por isso, existe um indicador booleano na lista de parmetros para alterar essa propriedade: display.newImage([parentGroup,]

filename [, baseDirectory] [, x, y] [,isFullResolution]).

29

O parmetro parentGroup indica o grupo pai do cenrio ao qual pertence o objeto e isFullResolution o parmetro responsvel por permitir o

redimensionamento ou no. O valor padro false. Caso seja indicado true a imagem carregada na sua resoluo total. Fernandez (2012, traduo nossa) indica algumas limitaes no

redimensionamento de imagens:
Arquivos de imagens PNG indexadas no so suportados. Escala de cinza no atualmente suportada, as imagens devem ser RGB. Imagens ainda sero redimensionadas se forem maiores do que as dimenses mximas possveis do dispositivo. Isso geralmente 1024x1024 (iPhone 3G) ou 2048x2048 (iPhone 3GS e iPad). Se voc recarregar a mesma imagem vrias vezes, as chamadas subsequentes para display.newImage ignora o parmetro isFullResolution e assume o valor passado pela primeira vez. Em outras palavras, a forma como voc carrega um arquivo de imagem a primeira vez afeta a configurao redimensionamento da prxima vez que voc carregar o mesmo arquivo. Isso porque Corona conserva memria de textura por automaticamente reutilizar uma textura que j tenha sido carregada. Como resultado, voc pode usar as mesmas imagens quantas vezes quiser, sem consumo adicional de memria.

4.4

Lidando com tamanhos diferentes de tela Algumas configuraes podem ser adicionada no config.lua para a hora do

runtime. Sabe-se que o Android um sistema operacional bastante fragmentado, sendo vtima das prprias qualidades. Steve Jobs (2010 ,apud CNN 2010, traduo nossa) afirmou: [...] o Android muito fragmentado [...] a Apple se esfora para o modelo integrado para que o usurio no seja forado a ser o integrador de sistemas. No caso do iOS a preocupao em portar seu aplicativo para os dispositivos pequena, pois, o modelo integrado da Apple pouco exige do desenvolvedor. O fato que o Android tem um ecossistema enorme, com uma quantidade de aparelhos, tamanhos de telas imensurvel (Figura 10). O Corona SDK ajuda no

30

sentido de uniformidade no desenvolvimento, existem parmetros que passados para o runtime determina automaticamente o tamanho do cenrio e reorganiza os elementos na tela de uma maneira satisfatria.

Figura 10 - Diversos dispositivos Android (ANIMOCA, 2012)

4.4.1 Redimensionamento automtico de contedo O Corona cuida do redimensionamento das imagens, caso isso seja configurado. Para que isso ocorra, necessrio configurar as seguintes propriedades no arquivo config.lua, Fernandez (2012, traduo nossa) descreve abaixo:
width: largura da resoluo da tela do dispositivo de destino original em formato retrato height: altura da resoluo da tela do dispositivo de destino original em formato retrato scale: determina qual tipo de auto-redimensionamento ser usado, pode ser um dos seguintes valores:

31

none redimensionamento automtico de contedo desativado letterbox redimensiona para cima o contedo o mximo possvel zoomEven redimensiona para cima o contedo o mximo possvel a caber na tela, mantendo a proporo zoomStrech redimensiona para cima o contedo de forma no uniforme para preencher a tela e estic-lo na horizontal ou na vertical

Dados esses parmetros, Fernandez (2012) informa que zoomStrech a melhor alternativa para o Android, j que existe essa infinidade de modelos de aparelhos e tamanhos de tela. 4.4.2 Alinhamento automtico de contedo Quando o contedo automaticamente redimensionado, ele centralizado por padro, devido diferentes tamanhos de telas e resolues, um contedo exibido em um aparelho precisa ser ajustado para que preencha toda a tela sem deixar nenhum espao vazio. Para isso necessrio usar as propriedades xAlign e yAlign. Eles recebem uma string que determina o alinhamento nas direes x e y, respectivamente. Abaixo os valores permitidos para cada eixo:
Tabela 2 - Valores permitidos para xAlign e yAlign

xAlign left center* right


* valores padro

yAlign top center* bottom

4.4.3 Redimensionamento automtico de imagem O Corona permite alternar entre imagens de baixa resoluo e alta resoluo sem precisar alterar o cdigo, deve-se considerar esse recurso ao construir uma aplicao que ser portada para diferentes dispositivos com diferentes resolues.

32

Para fazer uso dessa peculiaridade, deve-se alterar o arquivo config.lua e incluir a propriedade de tabela chamada de imageSuffix. Cada ndice de imageSuffix representa a string adicionada ao final do nome do arquivo e qual o fator multiplicador daquele sufixo, exemplo pode ser visto na Figura 11 abaixo:

Figura 11 - Exemplo de redimensionamento de imagem dinmico

Porm, para que a imagem se comporte dessa maneira, no se pode usar o comando display.newImage(), deve-se usar o comando

display.newImageRect([parentGroup,] filename [, basedirectory], w, h), exemplo:

Figura 12 - Exemplo de chamada de imagem dinmica

Em display.newRectImage(), tem-se que os parmetros w e h representam, respectivamente, a largura e altura da imagem. 4.4.4 Texto Para criar um texto a ser exibido, usa-se a o mtodo

display.newText([parentGroup, ] string, x, y, font, size). A cor do texto no passada

33

como parmetro para ser alterada, font deve indicar qualquer nome de fonte que esteja na biblioteca, e por fim, o parmetro size o tamanha do texto. Para font pode ser usado, algumas constantes do sistema como native.systemFont ou

native.systemFontBold. Abaixo uma lista de mtodos que alteram as propriedades de texto: object.size determina o tamanho do texto obect:setTextColor(r, g, b [, a]) Altera a cor do texto de acordo com o cdigo RGB (red, green e blue) e a representa a opacidade da cor, varia de 0 a 255 o padro 255 object.text Determina a string a ser usada.

34

A API DE Physics O Corona SDK usa um motor para fsica chamado Box2D (v. 2.1.2), e a

implementao feita pelo Corona permite que toda manipulao seja feita com poucas linhas. Qualquer DisplayObject pode ser manipulado pela Physics API pois o Corona trata cada PhysicObject como uma extenso de DisplayObject. O Box2D trabalha por padro com o sistema mtrico, porm a API facilita seu uso pois faz todas as converses necessrias para manipular os objetos, (ANSCA, 2012, traduo nossa). A escala padro de 30 pixels por metro e para manter a consistncia com o resto do SDK todas as medidas so feitas em graus ao invs de radianos. 5.1 Configurando o Physics Para iniciar o uso das chamadas de fsica, deve-se criar o namespace physics (Figura 13):

Figura 13 - Criando o Physics namespace

5.1.1 Iniciando, pausando e parando physics Os objetos podem ter seu status alterado ao se usar uma das trs funes a seguir: physics.start() reinicia ou resume o ambiente fsico. physics.pause() para o motor de fsica temporariamente. physics.stop() destri o ambiente fsico completamente.

35

Uma importante observao deve ser feita:


Por padro, Box2D corpos que no esto envolvidos em uma coliso iro "dormir" depois de alguns segundos. Isso reduz a sobrecarga, mas em alguns casos voc pode no querer esse comportamento [...] possvel substituir esse comportamento em um determinado organismo com o comando body.isSleepingAllowed = false, mas voc tambm pode substituir isso globalmente para todos os corpos no ambiente usando um parmetro opcional booleano no incio: physics.start(true) ou physics.start(false). (ANSCA, 2012, traduo nossa)

Outra nota a ser tomada que se o parmetro passado for true, isso ir prevenir que os corpos adormeam, caso false, o responsvel por determinar se um corpo adormece ou no o SDK. false o valor padro. 5.1.2 Gravidade possvel tratar a gravidade bidirecionalmente ou em apenas uma direo, por exemplo, caso seja definido que a gravidade do objeto igual a da Terra, temos que g = 9,8 m/s2. Para definir a gravidade, deve-se usar: physics.setGravity(x, y), onde x e y so o par ordenado do eixo cartesiano. O valor padro para essa funo x = 0 e y = 9.8, abaixo um exemplo na Figura 14:

Figura 14 - Redefinio de gravidade

possvel recuperar os valores usados na gravidade a partir da funo physics.getGravity(), o resultado passado em unidade de acelerao do SI (Figura 15).

36

Figura 15 - Recuperando valor da gravidade

Uma outra maneira de se manipular a gravidade de um elemento base-la de acordo com a inclinao do aparelho. Para que isso seja possvel necessrio que a API do acelermetro esteja aplicada e om isso a implementao desse tipo de gravidade fica simples, veja a Figura 16:

Figura 16 - Influncia do acelermetro na gravidade (ANSCA, 2012)

Nota-se que a funo criada onTilt() passada como parmetro quando um listener para o acelermetro criado. Ou seja, a cada vez que o dispositivo usado se mover, o acelermetro ser chamado e o evento disparado, dessa maneira muda-se a gravidade dos objetos em cena. 5.1.3 Outros mtodos 5.1.3.1 physics.setScale

Determina a proporo de pixels por metro usados na converso entre as coordenadas de tela, esse mtodo deve ser chamado antes que qualquer objeto fsico seja instanciado. Como dito anteriormente, o valor padro 30, porm para dispositivos com maior resoluo como iPad, Android ou iPhone 4, recomendado que o valor seja de 60 ou mais. Sintaxe: physics.setScale(value)

37

5.1.3.2

physics.setDrawMode

Representa como ser o modo de renderizao para o physics engine. Essa configurao pode ser alterada a qualquer momento. Sintaxe: physics.setDrawMode(mode). Onde mode pode ser: physics.setDrawMode(debug): Esse modo exibe apenas as bordas do motor de coliso.

Figura 17 - Modo debug (FERNANDEZ, 2012)

physics.setDrawMode(hybrid): Esse modo sobrepe as bordas de coliso em objetos normais do Corona.

Figura 18 - Modo hybrid (FERNANDEZ, 2012)

physics.setDrawMode(normal):

Esse

modo

padro

do

renderizador, sem bordas de coliso.

38

Figura 19 - Modo normal (FERNANDEZ, 2012)

5.1.3.3

physics.setPositionIterations

Essa funo determina a preciso do clculo de positionamento do motor. O valor padro 8, isso significa que o motor ir iterar por oito aproximaes de posio por frame para cada objeto. Deve ser manuseado com cuidado, pois pode trazer queda de performance para a aplicao. Sintaxe: physics.setPositionIterations(value) 5.1.3.4 physic.setVelocityIterations

Determina a preciso do clculo de vocidade do motor. O valor padro 3, assim o motor ir iterar por trs aproximaes de frame para cada objeto. Tambm deve ser manuseado com cuidado, pois pode trazer queda de performance. Sintaxe: physics.setVelocityIterations(value) 5.2 Colises Para detectar uma coliso, o objeto deve ter um listener atrelado chamado collision. O evento collision possui fases como began e ended, que so respectivamente os momentos de contato inicial e final durante a coliso. Essas fases existem tanto para a coliso de dois corpos e sensores. Alm do evento collision, dois outros eventos opcionais existem e podem ser usados sempre que dois corpos, no sensores, colidem:

39

preCollision: disparado momentos antes dos objetos comearem a interagir, dependendo da lgica aplicada ao jogo, talvez seja necessrio detectar este evento e sobrescrever a coliso.
Por exemplo, em um jogo do tipo plataforma, voc pode desejar construir plataformas unilateral, de modo que o personagem pode pular verticalmente, mas apenas nessa direo. Voc pode fazer isso comparando a posio da plataforma e do personagem para ver se o ele est abaixo da plataforma, e ento usar um timer para fazer a propriedade isSensor temporariamente true para que ele passe atravs da plataforma. (ANSCA, 2012, traduo nossa)

postCollision: disparado logo aps a coliso. Este o nico evento em que a fora da coliso reportada. Eventos de coliso no Corona tem um modelo similar aos eventos do touch, pode-se usar isso para otimizar a performance do jogo limitando o nmero de eventos que so criados. Por padro, quando dois objetos colidem, o evento disparado para o primeiro objeto e depois para o segundo objeto. 5.3 Corpos Fsicos Corpos fsicos nada mais so que uma extenso de um DisplayObject, ou seja, quando o construtor physics.addBody no retorna um novo objeto, mas apenas estende o DisplayObject com propriedades fsicas. Por isso, os atributos padro do objeto passam para o corpo fsico tambm. Porm, uma vez adicionadas as propriedades fsicas do objeto, no possvel remov-las, apenas possvel remover o objeto como um todo. 5.3.1 O construtor physics.addBody Como dito anteriormente, o comando physics.addBody adiciona propriedades fsicas a um objeto existente. Sintaxe: physics.addBody(object, [bodyType,] {density=d, friction=f, bounce=b [,radius=r] [,filter=f]}) physics.addBody(object, [bodyType,] {density=d, friction=f, bounce=b [,shape=s] [,filter=f]})

40

Algumas observaes com relao aos parmetros passados: density tem como o valor padro 1.0, que a densidade da gua. friction o valor padro 0.3, e pode ser um valor negativo. Se o valor for 0 (zero) significa que o corpo no tem frico e 1.0 representa uma frico forte. bounce uma propriedade interna do Box2d conhecida como restituio, e determina o quanto da velocidade de um objeto repassado aps uma coliso. O valor padro 0.2, que seria um objeto pouco saltitante. O valor de 1.0 indica que o objeto no tem perda alguma e valores maior que 1.0 indicam que o objeto ganha velocidade a cada coliso. Por padro, todos os objetos criados tem forma retangular, corpos circulares exigem um parmetro a mais, o radius, no caso esse parmetro recebe o raio. No indicado para corpos ovais, pois o Box2D apenas trata de colises circulares, retangulares e poligonais. Corpos poligonais precisam do parmetro shape. Esse campo uma tabela de pontos coordenados que formam as arestas do polgono. O mximo de pontos indicados permitidos por coliso de oito. Uma importante observao que todo polgono criado deve ser convexo, caso seja necessrio criar um corpo cncavo necessrio criar mltiplos objetos e anexar uns aos outros. Os corpos fsicos tambm podem ser classificados de trs maneiras: static, dynamic e kinematic. O bodyType padro o dynamic. Geralmente objetos que se movem so do tipo dynamic, e objetos que no se movem ou no so afetados por gravidade, de static. Objetos kinematic so afetados por foras, porm a gravidade em nada interfere, no caso, se o evento de drag (arrastar) for agir nesse objeto, seu bodyType deve ser esse, ao menos enquanto o evento de drag estiver em ao. A Figura 20 exibe alguns exemplos do construtor:

41

Figura 20 - Exemplos de tipos de corpos fsicos (ANSCA, 2012, traduo nossa)

5.3.2 Sensores Qualquer elemento pode ser tornado em sensor. Sensores no interagem fisicamente com outros corpos, mas produzem eventos de coliso quando outros corpos passam por eles. Um exemplo seria a caapa de uma mesa de sinuca. Para tornar um objeto como sensor, necessrio ao criar o objeto, passar o parmetro isSensor como true: physics.addBody(rect, {isSensor: true})

42

INSERO DE UDIO O processo de criao de um jogo envolve vrios elementos, e um dos

elementos que contribuem para o maior nvel de imerso so os efeitos sonoros. Segundo Fernandez (2012, traduo nossa):
Ns ouvimos efeitos sonoros e msica em quase todo tipo de mdia que encontramos diariamente. Muitos jogos notveis, como PacMan, Angry Birds, Fruit Ninja e pode ser reconhecido apenas por sua msica tema ou efeitos sonoros sozinho. Alm da imagem visual que vemos nos jogos, sons ajudar impacto o clima transmitido no enredo e/ou durante o jogo. Efeitos sonoros e msica de qualidade que dizem respeito ao tema do seu jogo ajuda a dar ao seu pblico uma sensao realista experincia.

O Corona Audio System usa os avanados recursos da OpenAL. O OpenAL projetado para renderizao eficiente de tridimensionais multicanais. Os formatos permitidos so: Todas as plataformas suportam arquivos 16-bit, little endian, linear, e .wav O iOS e o simulador para Mac suportam .mp3, .caf e .aac O simulador para Windows suporta .mp3 e .wav Android suporta os formatos .mp3 e .ogg

Essa diferena de adoo de formatos ocorre devido ao licenciamento desses formatos. Uma limitao apresentada no Android referente ao nome do arquivo de udio, j que ele ignora a extenso do arquivo, ento uma boa maneira de se diferenciar os arquivos adicionar tambm o nome da extenso ao nome do arquivo, por exemplo: ring_aac.aac ring_mp3.mp3 ring_ogg.ogg

43

6.1

Carregando o udio Existem duas maneiras de se incluir um udio, uma por stream e a outra

por carregamento completo para a memria Ao usar o stream, deve-se chamar o mtodo audio.loadStream, dessa maneira a aplicao ir economizar memria e ir carregar o udio em pedaos, uma aplicao quando se deve carregar uma msica ou algo mais logo. Esse mtodo no permite que se use mltiplos canais, devendo ser criado uma instncia para cada vez que for usado. Ao contrrio do stream, no carregamento por completo do udio para a memria, ele instanciado apenas uma vez e pode ser usado vrias vezes. Um bom exemplo de uso desse mtodo na implementao de efeitos sonoros. Sintaxe: audio.loadStream(audiofilename [, baseDir]) audio.loadSound(audiofilename [, baseDir])

Parmetros: audioFilename especifica o nome do arquivo de udio baseDir opcional e deve ser usado caso a pasta ao qual se encontra o udio for diferente da raiz do projeto Exemplo:

Figura 21 - Exemplos de carregamentos de udio (FERNANDEZ, 2012)

44

Fernandez (2012, traduo nossa) passa uma recomendao quanto a performance da biblioteca de udio:
[...] o melhor pr-carregar todos os seus arquivos na inicializao do aplicativo. Enquanto loadStream() geralmente rpido, loadSound() pode levar algum tempo uma vez que ele deve carregar e decodificar o arquivo inteiro no instante em que precisa ser usado. Geralmente, voc no deseja estar chamando loadSound() nas partes do seu aplicativo onde os usurios esperam que ele seja executado suavemente quando os eventos ocorrem, como por exemplo durante o jogo.

6.2

Controle de udio O Corona permite controles de udio bsicos como o play, o stop, o pause, o

resume e o rewind. Os controles de udio so simples de serem implementados, porm cada udio utilizado atrelado a um canal numa relao 1 para 1, ou seja, o udio em si no pausado, e o controle sobre o canal. 6.2.1 audio.play Executa o udio especificado em audioHandle, caso no seja informado um canal, o SDK escolhe um. Sintaxe: audio.play(audioHandle [, {[channel=c] [, loops=l] [, duration=d] [, fadein=f] [, onComplete=o]}]) Parmetros: audioHandle recebe o objeto criado com um dos mtodos de load. channel varia de 1 a 32, caso seja informado 0 (zero) este parmetro seja omitido, um canal ser automaticamente escolhido. loops inteiro que representa a quantidade de vezes que o udio ser repetido, se 0 (zero) no ser repetido nenhuma vez, se -1 ser repetido indefinidamente.

45

duration

intervalo de tempo que o udio ser executado em

milissegundos. fadein intervalo em milissegundos ao qual o udio ir comear a tocar do volume mnimo do canal at o volume normal. onComplete recebe o nome de uma funo que pode ser chamada aps a execuo do udio 6.2.2 Demais mtodos de controle Os mtodos de resume, pause e stop recebem como parmetro opcional o channel do canal a ser resumido, pausado e parado. Em todos os casos, se nada for informado ou se for passado o valor 0 (zero), a respectiva ao afetar todos os canais. Abaixo a Tabela 3 indica as opes de sintaxes para essas aes:
Tabela 3 - Sintaxes de controle de udio Ao Pausar Resumir Parar Voltar Sintaxe 1 audio.pause([channel]) audio.resume([channel]) audio.stop([channel]) audio.rewind(audioHandle) Sintaxe 2 audio.pause([{channel = c }]) audio.resume([{channel = c }]) audio.stop([{channel = c }]) audio.rewind({channel = c })

O rewind tem um funcionamento um pouco diferente dos demais, no caso, ele aceita tanto como parmetro o objeto do udio, tanto como o canal. A sintaxe a ser escolhida vai depender da maneira a qual ela foi carregada, se foi carregada usando o audio.loadStream, a melhor opo a Sintaxe 1, a Sintaxe 2 indicada apenas para objetos carregados com o audio.loadSound. 6.2.3 Controle de Volume As alteraes de volume so feitas indicando valores de 0 (zero) a 1, esse volume ser baseado de acordo com o volume do toque do dispositivo e so aplicadas aos canais do aparelho. Se o canal informado for 0 (zero), a configurao de volume ser aplicada a todos os canais. Se no for informado nenhum canal, essa alterao de volume ser feita no volume principal.

46

Tabela 4 - Controles de volume Sintaxe para recuperar (getters) audio.getVolume([{channel=c}]) audio.getVolume([{channel=c}]) audio.getVolume([{channel=c}])

Descrio Volume Volume mnimo Volume mximo

Sintaxe para definir (setters) audio.setVolume(volume [, {[channel=c]}]) audio.setMinVolume( volume [, {[channel=c]}]) audio.setMaxVolume(volume [, {[channel=c]}] )

A Tabela 4 representa as aes possveis para os getters e setters do volume, os getters funcionam de forma semelhante, se nenhum canal for informado, o valor a ser retornado o volume principal e se o canal informado for 0 (zero), o retorno ser uma mdia dos volumes de todos os canais.

47

GERAO DA BUILD O Corona capaz de gerar build para o iOS e o Android (o NOOK e o Kindle

Fire, so android-based). Porm, para gerar o arquivo executvel para o iOS necessrio ter uma conta de Developer com a Apple. 7.1 Executvel para o iOS Os passos abaixo descrevem as etapas necessrias para gerar o executvel para o iOS: Abra o simulador do Corona SDK Clique em File > Open e selecione o arquivo main.lua na pasta raiz do seu projeto. Uma vez exibida a aplicao no simulador, acesse o menu File > Build For > iOS, a seguinte janela aparecer:

Figura 22 - Caixa de dilogo (FERNANDEZ, 2012)

Preencha os campos Application Name e Version, e selecione qual tipo de build deve ser gerada, existem duas opes: Device e Xcode Simulator, aps, selecione os dispositivos suportados e qual a assinatura do aplicativo.

Clique no boto build.

Aps essa etapa, basta usar o iTunes para transferir o aplicativo para seu dispositivo com o iOS.

48

7.2

Executvel para Android Criar uma build para o Android mais simples, visto que no necessrio

nenhum tipo de chave para gerar os executveis para teste, caso o objetivo seja a distribuio pelo Google Play, necessrio ter uma Keystore ou uma Key Alias. Abra o simulador do Corona SDK Clique em File > Open e selecione o arquivo main.lua na pasta raiz do seu projeto. Uma vez exibida a aplicao no simulador, acesse o menu File > Build For > Android, a seguinte janela aparecer:

Figura 23 - Caixa de dilogo (FERNANDEZ, 2012)

Preencha os campos Application Name, Version Code (deve ser um inteiro), Version Name e Package (nome de pacote no padro do java, geralmente o reverso do seu nome de domnio). Selecione a verso do Android desejada (lembre que o Android retrocompatvel, e no necessrio gerar uma build para cada verso), para efeito de testes em dispositivos e no publicao na loja, selecione na Debug para a Keystore e androiddebugkey para a Key Alias.

Aps gerado o build um arquivo no formato apk ser criado e com a ajuda de algum outro software, como o ASTRO File Manager, copie o arquivo gerado para o seu dispositivo.

49

LIMITAES No que tange ao poder do seu SDK o Corona deixa a desejar, pois ele no

possui um SDK per se, e sim um conjunto de APIs que o desenvolvedor deve usar. No seu bundle de instalao o desenvolvedor vem munido de 3 executveis: Corona Simulator, Corona Terminal e debugger. Nenhuma outra ferramenta oferecida ao programador, o que faz com que o trabalho de programar seja um pouco mais manual. Porm, o maior problema do Corona se deve ao fato de ser isolado. Ele no permite chamadas direta s APIs do Android ou do iOS, ento certos recursos no podem ser implementados. O mesmo acontece para APIs de terceiros. Uma outra observao em relao ao Android, o fato que o Corona foi criado usando a verso 2.2 desse sistema operacional, ou seja, novos recursos implementados aps esta verso, ainda no esto disponveis para os

desenvolvedores do Corona SDK. A atual verso do Android a 4.0.4. Apesar de ser feito com um nvel de API muito baixo, os aplicativos criados funcionam normalmente na verso mais recente do Android, devido a retro compatibilidade.

50

CONSIDERAES FINAIS O objetivo de um framework facilitar o trabalho, e nesse quesito o Corona

SDK satisfaz as expectativas. O tempo de desenvolvimento de um jogo cai significantemente quando combinado os tempos de projeto do Android e do iOS. Com arquiteturas e filosofias diferentes, o desenvolvimento do mesmo jogo para diferentes plataformas geralmente exige duas equipes distintas. Grande parte da facilidade do Corona se deve ao fato de ele usar o Lua como linguagem, que devido sua pequena pegada, ele no causa grandes perdas de performance e no atrapalha o gerenciamento de memria. Devido ao fato de ser um framework com pouco tempo de mercado, sua adeso ainda baixa, mas a cada dia sua comunidade tm crescido, pois o desenvolvimento multi-plataforma visto como economia de tempo e de recursos. Nota-se que suas APIs so simples de usar e intuitivas, apesar de suas limitaes. Conhecer a ferramenta e saber qual ser a melhor abordagem para o problema proposto a melhor sada, pois apesar de ser fcil e rpido, talvez uma abordagem direta para cada plataforma seja a melhor opo caso recursos que sejam essenciais para o jogo construdo no estejam presentes na API do Corona. Porm, como opo para desenvolvimento o Corona deve sim estar entre os frameworks escolhidos, pois apesar de novo, o SDK apresenta um grande potencial para que seja mais robusto no futuro.

51

10

REFERNCIAS BIBLIOGRFICAS

JUNG, K. e BROWN, A., Beginning Lua Programming. Edio 1, Canad: Wiley Publishing, Inc., 2007. 644 pginas. FERNANDEZ, M. M., Corona SDK Mobile Game Development Beginners Guide. Edio 1, Reino Unido: Packt Publishing Ltd., 2012. 383 pginas. ALLEN, S., GRAUPERA, V. e LUNDRIGAN, L. Pro Smartphone Cross-Platform Development: iPhone, BlackBerry, Windows Mobile, and Android Development and Distribution. Edio 1, Estados Unidos da Amrica, 2011. 288 pginas. BURTON, B. G., Mobile App Development with Corona: Getting Started. Edio 1, Burton Media Group, Estados Unidos da Amrica, 2011. Vol. 1 e Vol. 2. NATIONS, D., Review: Corona SDK for iPhone and iPad Development. Disponvel em: <http://ipad.about.com/od/iPad-App-Dev/fr/Review-Corona-SDK-ForiPhone-And-iPad-Development.htm>. Acesso em 2 de Abril de 2012. MEENEN, J., Learn How to Develop Apps for iOS and Android with Corona SDK. Disponvel em: <http://www.cutemachine.com/product-creation/learn-how-todevelop-apps-for-ios-and-android-with-corona-sdk/>. Aceso em Maio de 2012. ANSCA MOBILE, Mobile Development Framework: API Reference. Disponvel em: <http://developer.anscamobile.com/resources/apis/>. Acesso em Abril de 2012. ANSCA MOBILE, Mobile Development Framework: Docs. Disponvel em: <http://developer.anscamobile.com/resources/docs>. Acesso em Abril de 2012. NPD GROUP, The NPG Group: For Once-Strong Smartphone Makers, 2011 was the year of new beginnings. Disponvel em: Acesso

<https://www.npd.com/wps/portal/npd/us/news/pressreleases/pr_111213>. em Abril de 2012.

52

NPD GROUP, Smartphone Track: Now increase your range of knowledge about smartphones. Disponvel em: <https://www.npd.com/lps/SmartphoneTrackPR/>. Acesso em Abril de 2012. PUC-RIO, Lua. Disponvel em: <http://www.lua.org/>. Acesso em Abril de 2012. ANIMOCA, All the Myriad Androids. Disponvel em:

<http://www.animoca.com/en/2012/05/all-the-myriad-androids/>. Acesso em Maio de 2012. CNN, Top Android champions fire back at Steve Jobs. Disponvel em <http://articles.cnn.com/2010-10-19/tech/android.jobs.response_1_android-devicesandroid-os-andy-rubin?_s=PM:TECH>. Acesso em Fevereiro 2012.

You might also like