Вы находитесь на странице: 1из 52

Faculdade de Tecnologia de Americana

Curso Superior de Tecnologia em Desenvolvimento de Jogos Digitais

Gabriela
Assinado de forma digital por
Gabriela Davila
DN: cn=Gabriela Davila, o, ou,

Davila
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.
V

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

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

ABSTRACT ............................................................................................................... VII

1 INTRODUO ..................................................................................................... 13

1.1 Requisitos Mnimos....................................................................................... 15


1.2 O simulador................................................................................................... 16
1.3 Licenciamento ............................................................................................... 17

2 ESTRUTURA DE UM PROJETO ........................................................................ 20

2.1 O arquivo config.lua ...................................................................................... 20


2.2 O arquivo build.settings ................................................................................ 20
2.3 Adicionando um projeto ao simulador........................................................... 21

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

4 ELEMENTOS GRFICOS: OS DisplayObjects ................................................ 24

4.1 Principais propriedades ................................................................................ 24


4.2 Principais mtodos........................................................................................ 26
4.3 Manipulao de imagens e texto .................................................................. 27
4.3.1 Adicionar imagem ............................................................................... 27
4.3.2 Redimensionar imagens ..................................................................... 28
4.4 Lidando com tamanhos diferentes de tela .................................................... 29
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.1.2 Gravidade ............................................................................................. 35
5.1.3 Outros mtodos ................................................................................... 36
5.2 Colises ........................................................................................................ 38
5.3 Corpos Fsicos .............................................................................................. 39
5.3.1 O construtor physics.addBody .......................................................... 39
5.3.2 Sensores .............................................................................................. 41

6 INSERO DE UDIO........................................................................................ 42

6.1 Carregando o udio ...................................................................................... 43


6.2 Controle de udio.......................................................................................... 44
6.2.1 audio.play ............................................................................................. 44
6.2.2 Demais mtodos de controle ............................................................. 45
6.2.3 Controle de Volume ............................................................................. 45

7 GERAO DA BUILD......................................................................................... 47

7.1 Executvel para o iOS .................................................................................. 47


7.2 Executvel para Android ............................................................................... 48

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

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

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


X

LISTA DE FIGURAS E TABELAS

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


Figura 2 - Tela Corona SDK no Mac OS X (FERNANDEZ, 2012) ............................ 16
Figura 3 - Janela de registro do Corona (FERNANDEZ, 2012)................................. 17
Figura 4 - Janela de alerta exibida ao iniciar um jogo no Android, uma imagem
similar a essa exibida no iPhone ..................................................................... 17
Figura 5 - Estrutura de um projeto com Corona SDK ................................................ 20
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 15 - Recuperando valor da gravidade ............................................................ 36
Figura 16 - Influncia do acelermetro na gravidade (ANSCA, 2012) ...................... 36
Figura 17 - Modo debug (FERNANDEZ, 2012) ......................................................... 37
Figura 18 - Modo hybrid (FERNANDEZ, 2012) ......................................................... 37
Figura 19 - Modo normal (FERNANDEZ, 2012) ........................................................ 38
Figura 20 - Exemplos de tipos de corpos fsicos (ANSCA, 2012, traduo nossa).. 41
Figura 21 - Exemplos de carregamentos de udio (FERNANDEZ, 2012) ................ 43
Figura 22 - Caixa de dilogo (FERNANDEZ, 2012) .................................................. 47
Figura 23 - Caixa de dilogo (FERNANDEZ, 2012) .................................................. 48

Tabela 1 - Comparativo entre licenas do Corona SDK ............................................ 18


Tabela 2 - Valores permitidos para xAlign e yAlign ................................................... 31
Tabela 3 - Sintaxes de controle de udio .................................................................. 45
Tabela 4 - Controles de volume................................................................................. 46
XI

LISTA DE ABREVIAES E SIGLAS

aac Advanced Audio Coding


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

wav WAVEform audio format


13

1 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 Trial Pro

Testar e visualizar os aplicativos no simulador do Corona


Sim Sim
para Desktop

Instalar e testar os aplicativos em seu iPhone pessoal, iPad


Sim Sim
iPod touch, Android e dispositivos

Acesso ilimitado a todas as APIs simples e poderosas do


Sim Sim
Corona

O acesso prioritrio a novos recursos a partir do momento


No Sim
que eles tornam-se disponveis em Daily Builds

Prioridade na compilao, at 5x mais rpido No Sim

Tamanho otimizado do aplicativo No Sim

Sem marca dgua No Sim

Fruns exclusivos para assinantes No Sim

Corona Analytics No Sim

Recursos Promocionais e divulgao do aplicativo pela


No Sim
Ansca Mobile

Distribuir para a iTunes App Store, Android Marketplace,


Amazon Kindle Fire Appstore, e Barnes & Noble NOOK No Sim
Color Appstore

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

2 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

3 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

4 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: retorna a altura do objeto em


coordenadas de tela.

 object.contentWidth: retorna a largura do objeto em


coordenadas de tela.

 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 display.CenterReferencePoint

o display.TopLeftReferencePoint

o display.TopCenterReferencePoint

o display.TopRightReferencePoint

o display.CenterRightReferencePoint
27

o display.BottomRightReferencePoint

o display.BottomCenterReferencePoint

o display.BottomLeftReferencePoint

o 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 yAlign

left top
center* center*
right bottom
* valores padro

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

5 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 o 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

6 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 Pac-
Man, 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 Sintaxe 1 Sintaxe 2

Pausar audio.pause([channel]) audio.pause([{channel = c }])

Resumir audio.resume([channel]) audio.resume([{channel = c }])

Parar audio.stop([channel]) audio.stop([{channel = c }])

Voltar audio.rewind(audioHandle) 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


Descrio Sintaxe para definir (setters)
(getters)

Volume audio.setVolume(volume [, {[channel=c]}]) audio.getVolume([{channel=c}])

Volume mnimo audio.setMinVolume( volume [, {[channel=c]}]) audio.getVolume([{channel=c}])

Volume mximo audio.setMaxVolume(volume [, {[channel=c]}] ) audio.getVolume([{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

7 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

8 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

9 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-For-
iPhone-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-to-
develop-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:
<https://www.npd.com/wps/portal/npd/us/news/pressreleases/pr_111213>. Acesso
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-devices-
android-os-andy-rubin?_s=PM:TECH>. Acesso em Fevereiro 2012.

Вам также может понравиться