Monografia - Gabriela Davila - Corona SDK-Libre

52
 Faculdade de Tecnologia de Americana Curso Superior de Tecnologia em Desenvolvimento de Jogos Digitais CORONA SDK: UMA INTRODUÇÃO NO DESENVOLVIMENTO MÓVEL DE JOGOS COM FRAMEWORK MULTI-PLATAFORMA GABRIELA DAVILA Americana, SP 2012 Gabriela Davila Assinado de forma digital por Gabriela Davila DN: cn=Gabriela Davila, o, ou, [email protected], c=BR Dados: 2012.06.24 20:50:03 -03'00'

Transcript of Monografia - Gabriela Davila - Corona SDK-Libre

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    1/52

    Faculdade de Tecnologia de AmericanaCurso Superior de Tecnologia em Desenvolvimento de Jogos Digitais

    CORONA SDK: UMA INTRODUO NODESENVOLVIMENTO MVEL DE JOGOS COM

    FRAMEWORK MULTI-PLATAFORMA

    GABRIELA DAVILA

    Americana, SP2012

    Gabriela

    Davila

    Assinado de forma digital por

    Gabriela Davila

    DN: cn=Gabriela Davila, o, ou,

    [email protected],

    c=BR

    Dados: 2012.06.24 20:50:03 -03'00'

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    2/52

    II

    Faculdade de Tecnologia de AmericanaCurso Superior de

    CORONA SDK: UMA INTRODUO NODESENVOLVIMENTO MVEL DE JOGOS COM

    FRAMEWORK MULTI-PLATAFORMA

    GABRIELA DAVILA

    [email protected]

    Trabalho de Concluso de Cursodesenvolvido em cumprimento exigncia curricular do Curso Superior

    de Tecnologia em Desenvolvimento deJogos Digitais, sob a orientao doProf. Benedito A. Cruz.

    rea: Jogos Digitais

    Americana, SP2012

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    3/52

    III

    BANCA EXAMINADORA

    Prof. Benedito Aparecido Cruz (Orientador)

    Prof. Jos William Pinto Gomes

    Prof. Antonio Alfredo Lacerda

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    4/52

    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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    5/52

    V

    DEDICATRIA

    Dedico minha Me.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    6/52

    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, fazsentido 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

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    7/52

    VII

    ABSTRACT

    The development for mobile platforms is rising in the last four years. And asthe 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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    8/52

    VIII

    SUMRIO

    AGRADECIMENTOS ................................................................................................. IVDEDICATRIA ............................................................................................................ VRESUMO .................................................................................................................... VIABSTRACT ............................................................................................................... VII1 INTRODUO ..................................................................................................... 131.1 Requisitos Mnimos ....................................................................................... 151.2 O simulador ................................................................................................... 161.3 Licenciamento ............................................................................................... 172 ESTRUTURA DE UM PROJETO ........................................................................ 202.1 O arquivo config.lua...................................................................................... 202.2 O arquivo build.settings................................................................................ 202.3 Adicionando um projeto ao simulador ........................................................... 213 BREVE INTRODUO AO Lua.......................................................................... 224 ELEMENTOS GRFICOS: OS DisplayObjects................................................ 244.1 Principais propriedades ................................................................................ 244.2 Principais mtodos ........................................................................................ 264.3 Manipulao de imagens e texto .................................................................. 27

    4.3.1 Adicionar imagem ............................................................................... 274.3.2 Redimensionar imagens ..................................................................... 28

    4.4 Lidando com tamanhos diferentes de tela .................................................... 294.4.1 Redimensionamento automtico de contedo ................................. 304.4.2 Alinhamento automtico de contedo .............................................. 314.4.3 Redimensionamento automtico de imagem ................................... 314.4.4 Texto ..................................................................................................... 32

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

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    9/52

    IX

    5.1.1 Iniciando, pausando e parandophysics........................................... 345.1.2 Gravidade ............................................................................................. 355.1.3 Outros mtodos ................................................................................... 36

    5.2 Colises ........................................................................................................ 385.3 Corpos Fsicos .............................................................................................. 39

    5.3.1 O construtorphysics.addBody.......................................................... 395.3.2 Sensores .............................................................................................. 41

    6 INSERO DE UDIO ........................................................................................ 426.1 Carregando o udio ...................................................................................... 436.2 Controle de udio .......................................................................................... 44

    6.2.1 audio.play............................................................................................. 446.2.2 Demais mtodos de controle ............................................................. 456.2.3 Controle de Volume ............................................................................. 45

    7 GERAO DA BUILD......................................................................................... 477.1 Executvel para o iOS .................................................................................. 477.2 Executvel para Android ............................................................................... 488 LIMITAES ....................................................................................................... 499 CONSIDERAES FINAIS ................................................................................. 5010 REFERNCIAS BIBLIOGRFICAS ................................................................. 51

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    10/52

    X

    LISTA DE FIGURAS E TABELAS

    Figura 1 - Comparativo entre sistemas operacionais (NPD GROUP, 2011) ............. 14Figura 2 - Tela Corona SDK no Mac OS X (FERNANDEZ, 2012) ............................ 16Figura 3 - Janela de registro do Corona (FERNANDEZ, 2012) ................................. 17Figura 4 - Janela de alerta exibida ao iniciar um jogo no Android, uma imagem

    similar a essa exibida no iPhone ..................................................................... 17Figura 5 - Estrutura de um projeto com Corona SDK ................................................ 20Figura 6 - Exemplo de cdigo em Lua....................................................................... 23Figura 7 - Exemplo de chamada de mtodos ............................................................ 26Figura 8 - Aplicao de object.rotate()....................................................................... 27Figura 9 - Imagem carregada via display.newImage().............................................. 28Figura 10 - Diversos dispositivos Android (ANIMOCA, 2012) ................................... 30Figura 11 - Exemplo de redimensionamento de imagem dinmico........................... 32Figura 12 - Exemplo de chamada de imagem dinmica ........................................... 32Figura 13 - Criando o Physics namespace................................................................ 34Figura 14 - Redefinio de gravidade........................................................................ 35Figura 15 - Recuperando valor da gravidade ............................................................ 36Figura 16 - Influncia do acelermetro na gravidade (ANSCA, 2012) ...................... 36Figura 17 - Modo debug(FERNANDEZ, 2012) ......................................................... 37Figura 18 - Modo hybrid(FERNANDEZ, 2012) ......................................................... 37Figura 19 - Modo normal (FERNANDEZ, 2012) ........................................................ 38Figura 20 - Exemplos de tipos de corpos fsicos (ANSCA, 2012, traduo nossa).. 41Figura 21 - Exemplos de carregamentos de udio (FERNANDEZ, 2012) ................ 43Figura 22 - Caixa de dilogo (FERNANDEZ, 2012) .................................................. 47

    Figura 23 - Caixa de dilogo (FERNANDEZ, 2012) .................................................. 48

    Tabela 1 - Comparativo entre licenas do Corona SDK ............................................ 18Tabela 2 - Valores permitidos paraxAligne yAlign................................................... 31Tabela 3 - Sintaxes de controle de udio .................................................................. 45Tabela 4 - Controles de volume ................................................................................. 46

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    11/52

    XI

    LISTA DE ABREVIAES E SIGLAS

    aac Advanced Audio Coding

    apk Android Aplication PackageANSI 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 ExemploGB Gigabyte

    GHz Gigahertz

    GIF Graphics Interchange Forma

    JPEG Join Photographic Experts Group

    JPG Join Photographic Group

    m Unidade de metro

    MB MegabyteMIT 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

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    12/52

    XII

    wav WAVEform audio format

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    13/52

    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. Aoqual 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 softwarepara 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 seusucesso entre a consistncia do iPhone e a flexibilidade do Android.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    14/52

    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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    15/52

    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, Photoshope Flash Authoringpara 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

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    16/52

    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 builddeve ser realizado no Macintosh, pois no existe SDK do iOSpara 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 .msitransferido do site

    da Ansca Mobile. Deve-se clicar duas vezes no arquivo e seguir as instrues

    exibidas na tela.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    17/52

    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 softwareque 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 trialinsere 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

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    18/52

    18

    E assinantes tm prioridade na hora de fazer o buildda aplicao, entende-se

    por buildo 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

    para DesktopSim Sim

    Instalar e testar os aplicativos em seu iPhone pessoal, iPad

    iPod touch, Android e dispositivosSim Sim

    Acesso ilimitado a todas as APIs simples e poderosas doCorona

    Sim Sim

    O acesso prioritrio a novos recursos a partir do momentoque eles tornam-se disponveis em Daily Builds

    No Sim

    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 pelaAnsca Mobile

    No Sim

    Distribuir para a iTunes App Store, Android Marketplace,Amazon Kindle Fire Appstore, e Barnes & Noble NOOKColor Appstore

    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:

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    19/52

    19

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

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    20/52

    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 desacopladopodem ser adicionados a medida que for necessrio.

    Outros arquivos podem opcionalmente compor um projeto, os principais so: config.lua, ebuild.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 Luae nele devem ser inseridas instrues para serem usadas na hora

    do build.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    21/52

    21

    2.3 Adicionando um projeto ao simulador

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

    arquivo main.luapelo caminho: File > Open. Os demais arquivos sero diretamenteou indiretamente adicionados ao simulador devido a este arquivo.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    22/52

    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 egratuita 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 hardwaredado 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 softwarescomo ApacheHTTP Server, Adobe Photoshop Lightroom, entre outros. Jung e Brown (2007)

    opinam que:

    [...] Lua tem caractersticas que suportam os requisitos avanados deprogramas. Ele impe muito poucas convenes sobre a maneiracomo voc escreve seu cdigo, ele fornece mecanismos com osquais voc pode construir solues claras e de fcil manuteno parasuas tarefas de programao. At mesmo os programadores maisexperientes encontram novas formas poderosas de usar Lua para

    estender e simplificar suas aplicaes.

    Lua robusto, mas sua leve curva de aprendizagem o torna bastanteadequado como primeira linguagem de programao. Em conjunto,estas caractersticas fazem de Lua uma linguagem atraente para osestudantes 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 Luatem 3 tipos de variveis: variveis locais, variveis globais e campos detabelas. 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 inteiroscomo ndice dessa tabela, ela tratada como uma matriz, caso seja utilizado strings

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    23/52

    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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    24/52

    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 newcomo 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, elesimplicitamente adicionam como classepaio 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

    paidesses objetos (FERNANDEZ, 2012, traduo nossa).

    4.1 Principais propriedades

    Conforme demonstrado anteriormente, o operador ponto deve ser usado paraacessar 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 coordenadaslocais.

    object.isVisible : controla se o objeto visvel na tela ou no,true para que seja visvel e false para que no. O valorpadro true.

    object.isHitTestable : permite a um objeto a continuar areceber eventos de toque (hit) mesmo que no esteja visvel.Se true, o objeto receber os eventos de toqueindependentemente da visibilidade; se false, eventos apenasafetaro objetos visveis. O valor padro false.

    object.parent: retorna o pai do objeto, essa propriedade imutvel.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    25/52

    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 dexMin,xMax, yMine yMax. Geralmente usado paramapear um objeto em um grupo para as coordenadas de tela.

    object.contentHeight: retorna a altura do objeto emcoordenadas de tela.

    object.contentWidth: retorna a largura do objeto emcoordenadas de tela.

    object.width: retorna a largura em coordenadas locais.

    object.x: especifica a posio no eixo xdo objeto em relao

    ao pai a origem do pai, especificamente. Ao alterar essevalor, o objeto ir se mover no eixox.

    object.xOrigin: especifica a posio no eixo x de origem doobjeto em relao origem do pai Ao alterar esse valor, oobjeto ir se mover no eixox.

    object.xReference : define a posio no eixo x do ponto dereferncia em relao ao local de origem do objeto. Para amaioria dos objetos de exibio, o valor padro 0, ou seja, aposio no eixo x da origem e o ponto de referncia so osmesmos.

    object.xScale: obtm ou define o fator de dimensionamentoX.Um valor de 0,5 ir dimensionar o objeto a 50 por cento nadireo do eixo x. O dimensionamento ocorre em torno doponto de referncia do objeto. O ponto de referncia padropara a maioria dos objetos de exibio o centro.

    object.y: especifica a posio no eixo ydo objeto em relaoao pai a origem do pai, especificamente. Ao alterar essevalor, o objeto ir se mover no eixo y.

    object.yOrigin : especifica a posio no eixo y de origem doobjeto em relao origem do pai Ao alterar esse valor, oobjeto ir se mover no eixo y.

    object.yReference : define a posio no eixo y do ponto dereferncia em relao ao local de origem do objeto. Para amaioria dos objetos de exibio, o valor padro 0 (zero), ouseja, a posio no eixo y da origem e o ponto de refernciaso 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 doponto de referncia do objeto. O ponto de referncia padropara a maioria dos objetos de exibio o centro.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    26/52

    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 emgraus ao objeto para rotacionar.

    object:scale(sx, sy): multiplica XScale e yScalepropriedadespor sxe syrespectivamente.

    object:setReferencePoint(referencePoint) : define o ponto dereferncia tanto para o centro do objeto (padro) ou para umdos vrios pontos convenientes ao longo da caixadelimitadora do objeto. O referencePointargumento deve seruma dos parmetros abaixo:

    o display.CenterReferencePoint

    o display.TopLeftReferencePoint

    o display.TopCenterReferencePoint

    o display.TopRightReferencePoint

    o display.CenterRightReferencePoint

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    27/52

    27

    o display.BottomRightReferencePoint

    o display.BottomCenterReferencePoint

    o display.BottomLeftReferencePoint

    o display.CenterLeftReferencePoint

    object:translate(deltaX, deltaY): acrescenta deltaX e deltaYpara as propriedadesxe y, respectivamente. Isto ir mover oobjeto de sua posio atual.

    object:removeSelf() : remove o objeto da exibio na tela elibera o espao usado na memria, assumindo que no houtras 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 directoryrepresenta o caminho relativo doarquivo, 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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    28/52

    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 paracarregar em um dispositivo. Arquivos PNG tm melhor qualidade

    sobre JPG e so usados para exibir imagens transparentes. JPG nosalvam 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]).

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    29/52

    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 imagensdevem ser RGB.

    Imagens ainda sero redimensionadas se forem maiores doque as dimenses mximas possveis do dispositivo. Issogeralmente 1024x1024 (iPhone 3G) ou 2048x2048 (iPhone3GS e iPad).

    Se voc recarregar a mesma imagem vrias vezes, aschamadas subsequentes para display.newImage ignora oparmetro isFullResolution e assume o valor passado pelaprimeira vez. Em outras palavras, a forma como voc carregaum arquivo de imagem a primeira vez afeta a configurao

    redimensionamento da prxima vez que voc carregar omesmo arquivo. Isso porque Corona conserva memria detextura por automaticamente reutilizar uma textura que jtenha sido carregada. Como resultado, voc pode usar asmesmas imagens quantas vezes quiser, sem consumoadicional 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

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    30/52

    30

    sentido de uniformidade no desenvolvimento, existem parmetros que passados

    para o runtimedetermina 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 destinooriginal em formato retrato

    height: altura da resoluo da tela do dispositivo de destinooriginal em formato retrato

    scale: determina qual tipo de auto-redimensionamento serusado, pode ser um dos seguintes valores:

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    31/52

    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 formano uniforme para preencher a tela e estic-lo na horizontalou 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 direesx e y, respectivamente. Abaixo

    os valores permitidos para cada eixo:

    Tabela 2 - Valores permitidos paraxAligne yAlign

    xAlign yAlign

    left

    center*

    right

    top

    center*

    bottom

    * valores padro

    4.4.3 Redimensionamento automtico de imagem

    O Corona permite alternar entre imagens de baixa resoluo e alta resoluosem precisar alterar o cdigo, deve-se considerar esse recurso ao construir uma

    aplicao que ser portada para diferentes dispositivos com diferentes resolues.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    32/52

    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

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    33/52

    33

    como parmetro para ser alterada, font deve indicar qualquer nome de fonte que

    esteja na biblioteca, e por fim, o parmetro sizeo tamanha do texto. Para fontpode

    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, greene blue) e arepresenta a opacidade da cor, variade 0 a 255 o padro 255

    object.text Determina a string a ser usada.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    34/52

    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 compoucas linhas. Qualquer DisplayObjectpode ser manipulado pela PhysicsAPI pois o

    Corona trata cada PhysicObjectcomo 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 deradianos.

    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 parandophysics

    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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    35/52

    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 asobrecarga, mas em alguns casos voc pode no querer essecomportamento [...] possvel substituir esse comportamento em umdeterminado organismo com o comando body.isSleepingAllowed =false, mas voc tambm pode substituir isso globalmente para todosos corpos no ambiente usando um parmetro opcional booleano noincio: 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), ondexe yso

    o par ordenado do eixo cartesiano. O valor padro para essa funo x = 0e 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).

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    36/52

    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

    listenerpara 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)

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    37/52

    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 modepode 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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    38/52

    38

    Figura 19 - Modo normal (FERNANDEZ, 2012)

    5.1.3.3 physics.setPositionIterations

    Essa funo determina a preciso do clculo de positionamento do motor. Ovalor 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:

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    39/52

    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 desejarconstruir plataformas unilateral, de modo que o personagem podepular verticalmente, mas apenas nessa direo. Voc pode fazer issocomparando a posio da plataforma e do personagem para ver se oele est abaixo da plataforma, e ento usar um timer para fazer apropriedade isSensor temporariamente true para que ele passeatravs 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 construtorphysics.addBodyno retorna um novo objeto, mas apenas

    estende o DisplayObjectcom 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 construtorphysics.addBody

    Como dito anteriormente, o comando physics.addBodyadiciona 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]})

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    40/52

    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 bodyTypepadro 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 kinematicso afetados por foras, porm a gravidade

    em nada interfere, no caso, se o evento de drag(arrastar) for agir nesse objeto, seu

    bodyTypedeve ser esse, ao menos enquanto o evento de dragestiver em ao.

    A Figura 20 exibe alguns exemplos do construtor:

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    41/52

    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 comotrue:

    physics.addBody(rect, {isSensor: true})

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    42/52

    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 mdiaque encontramos diariamente. Muitos jogos notveis, como Pac-Man, Angry Birds, Fruit Ninja e pode ser reconhecido apenas por suamsica tema ou efeitos sonoros sozinho. Alm da imagem visual quevemos nos jogos, sons ajudar impacto o clima transmitido no enredoe/ou durante o jogo. Efeitos sonoros e msica de qualidade quedizem respeito ao tema do seu jogo ajuda a dar ao seu pblico uma

    sensao realista experincia.

    O Corona Audio Systemusa 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, .cafe .aac

    O simulador para Windows suporta .mp3e .wav

    Android suporta os formatos .mp3e .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 sediferenciar os arquivos adicionar tambm o nome da extenso ao nome do

    arquivo, por exemplo:

    ring_aac.aac

    ring_mp3.mp3

    ring_ogg.ogg

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    43/52

    43

    6.1 Carregando o udio

    Existem duas maneiras de se incluir um udio, uma por streame 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)

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    44/52

    44

    Fernandez (2012, traduo nossa) passa uma recomendao quanto a

    performance da biblioteca de udio:

    [...] o melhor pr-carregar todos os seus arquivos na inicializaodo aplicativo. Enquanto loadStream() geralmente rpido,loadSound()pode levar algum tempo uma vez que ele deve carregare decodificar o arquivo inteiro no instante em que precisa ser usado.Geralmente, voc no deseja estar chamando loadSound() naspartes do seu aplicativo onde os usurios esperam que ele sejaexecutado suavemente quando os eventos ocorrem, como porexemplo durante o jogo.

    6.2 Controle de udio

    O Corona permite controles de udio bsicos como o play,o stop, o pause, oresume 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 emaudioHandle, 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 deload.

    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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    45/52

    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

    channeldo canal a ser resumido, pausado e parado. Em todos os casos, se nada forinformado 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 })

    Orewindtem 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 apenaspara 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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    46/52

    46

    Tabela 4 - Controles de volume

    Descrio Sintaxe para definir (setters)Sintaxe para recuperar

    (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 getterse settersdo volume,

    os gettersfuncionam 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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    47/52

    47

    7 GERAO DA BUILD

    O Corona capaz de gerar buildpara 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 Developercom 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> Opene selecione o arquivo main.luana 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 camposApplication Namee 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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    48/52

    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 adistribuio pelo Google Play, necessrio ter uma Keystoreou uma Key Alias.

    Abra o simulador do Corona SDK

    Clique em File> Opene selecione o arquivo main.luana 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 buildpara cada verso), para efeito de testes em

    dispositivos e no publicao na loja, selecione na Debug para a

    Keystoree androiddebugkeypara a Key Alias.

    Aps gerado o buildum arquivo no formato apkser criado e com a ajuda de

    algum outro software, como o ASTRO File Manager, copie o arquivo gerado para o

    seu dispositivo.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    49/52

    49

    8 LIMITAES

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

    possui um SDKper se, e sim um conjunto de APIs que o desenvolvedor deve usar.No seu bundlede 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 nopodem 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.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    50/52

    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 caisignificantemente 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 Luacomo

    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

    frameworksescolhidos, pois apesar de novo, o SDK apresenta um grande potencial

    para que seja mais robusto no futuro.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    51/52

    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: . Acesso em 2 de Abril de 2012.

    MEENEN, J., Learn How to Develop Apps for iOS and Android with Corona

    SDK. Disponvel em: . Aceso em Maio de 2012.

    ANSCA MOBILE, Mobile Development Framework: API Reference. Disponvel

    em: . Acesso em Abril de 2012.

    ANSCA MOBILE, Mobile Development Framework: Docs. Disponvel em:

    . 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

    em Abril de 2012.

  • 5/28/2018 Monografia - Gabriela Davila - Corona SDK-Libre

    52/52

    52

    NPD GROUP, Smartphone Track: Now increase your range of knowledge about

    smartphones. Disponvel em: .

    Acesso em Abril de 2012.

    PUC-RIO, Lua. Disponvel em: . Acesso em Abril de 2012.

    ANIMOCA, All the Myriad Androids. Disponvel em:

    . Acesso em Maio de

    2012.

    CNN, Top Android champions fire back at Steve Jobs. Disponvel em. Acesso em Fevereiro 2012.