Tutorial: Desenvolvimento de Jogos para Android com Cocos2d-x – Parte 1

De forma geral, a API do Android foi projetada para desenvolvimento de aplicações que fazem uso de interface gráfica de alto nível. Isso significa que é fácil programar aplicações que têm botões, caixas de texto, listas de escolha e rótulos, por exemplo. No entanto, jogos eletrônicos geralmente apresentam uma interface gráfica própria e vários outros elementos que não existem na interface gráfica de alto nível, como o caso dos sprites, por exemplo. Que tal começarmos a programar jogos como os profissionais?

No último tutorial, nós vimos como incluir efeitos sonoros no Jokenpô. Agora vocês já têm ideia de como programar jogos em interface de alto nível, como o caso do Jokenpô. Então vamos iniciar o desenvolvimento de jogo em baixo nível. o/

 

Porque partimos para o baixo nível?
Quando programamos em baixo nível, nós temos total controle sobre o aparelho que estamos rodando nosso jogo e, em consequência, sobre o próprio jogo. Esse é um ponto muito importante para desenvolvedores de jogos, pois se você quiser fazer um jogo que não deforme as imagens em celulares diferentes, por exemplo, você terá que programar em baixo nível.

Outro ponto importante da programação em baixo nível é que geralmente a compilação do seu código é feita diretamente para executar sobre o hardware e sistema operacional do seu aparelho, evitando processamento desnecessário. Um jogo em Unity ou Flash, por exemplo, executa sobre uma máquina virtual, o que não deixa o game otimizado em comparação com outro que teve a sua programação em baixo nível.

Em compensação, quando você programa em baixo nível, é necessário que você escreva mais linhas de código do que o normal. Assim, você terá um pouco mais de trabalho para fazer algo no jogo de forma que não contenha bugs. Fazer um personagem andar na tela, por exemplo, exigirá mais linhas de código do que se ele fosse programado em alto nível. Mas não é tão complicado assim, é apenas um pouco mais trabalhoso.

 

Android NDK:
No sistema operacional Android, quando programamos em Java e XML, como fizemos até o último tutorial, nós estamos programando em alto nível. Isso significa que o código é lido pela máquina virtual Java que tem no aparelho. Isso faz com que a compilação do código possa ser feita em qualquer plataforma, Windows, Linux ou Mac OS. Independente de onde foi compilado, a máquina virtual Java do aparelho é que vai interpretar o código.

Como vamos programar em baixo nível, então o problema é um pouco mais em baixo. Primeiramente, a linguagem padrão de baixo nível para o Android, também chamada de “linguagem nativa”, é a linguagem C++. Então eu preciso saber a linguagem C++? De preferência, sim. =]

Comentei também que quando programamos baixo nível, nós compilamos diretamente para o hardware e sistema operacional do dispositivo. Como Android é uma distribuição do Linux criada pelo Google, então precisamos compilar o nosso código no compilador C++ para o sistema operacional Linux.

O Google disponibilizou um conjunto de ferramentas para compilação em C++ para Android. O NDK (Native Development Kit) pode ser baixado aqui, bastando selecionar qual o sistema operacional do seu computador. Ao baixá-lo, apenas descompacte em algum lugar que você deseja. É importante que o caminho onde você o descompactou não contenha espaços em branco como, por exemplo, “C:Program Files…”.

Tendo o kit em mãos, agora necessitamos do compilador C++ que compila para Linux mesmo estando no Windows (falei que eu faria todos os tutoriais em Windows). Para isso, precisamos baixar o aplicativo Cygwin.

 

Ambiente Terminal Cygwin:
O Cygwin é um conjunto de ferramentas que proporciona para os usuários do Windows um ambiente bash parecido com o Terminal do Linux. Dessa forma, se você baixar o Cygwin e os seus pacotes de compilação, ele compilará um código C++ para o sistema operacional Linux. É exatamente o que o nosso Windows precisa. =]

Você pode baixar o Cygwin aqui. A sua instalação é um pouco complicada porque você precisa instalar junto com o aplicativo um pacote que não vem com ele. Durante o processo de instalação, aparecerá a tela mostrada na Figura 1. Ali você poderá escolher vários sites para baixar diferentes pacotes para o Cygwin. Você precisará baixar o aplicativo “make” de um desses sites. Ao selecionar um dos sites e clicar em “Avançar >” aparecerá a tela mostrada na Figura 2. Nessa tela, vocês vejam se o “make” está instalado no Cygwin. A Figura 2 mostra como aparece quando ele está devidamente instalado.

Figura 1 – Escolha dos sites

Figura 2 – Aplicativo “make”

Agora basta testarmos para ver se deu tudo certo. ;D

 

Hello World Nativo:
O mais comum dos programadores é criar um programa chamado “Hello World” com o principal intuito de iniciar a programação em uma área nova. No nosso caso, vamos ver se deu tudo certo e como compilamos um programa nativo (baixo nível) no Android.

Inicialmente, acesse pelo Cygwin a pasta “samples”, dentro da pasta do NDK baixado. Logo depois acesse a pasta “hello-jni”. Para fazer isso, execute o Cygwin. Na janela que abrir, digite: “cd /cygdrive/<caminho da pasta hello-jni>”. No meu computador, eu digitei: “/cygdrive/c/android-ndk-r8e/samples/hello-jni”, visto que a minha versão do NDK não é a última. Logo após, digite “/cygdrive/c/android-ndk-r8e/ndk-build”. Obviamente coloque a pasta onde você colocou o NDK. A Figura 3 mostra o que eu digitei.

Figura 3 – Compilação do código C++

O que fizemos aqui? Primeiramente nós acessamos, pelo ambiente Linux, a pasta de um programa exemplo que vem com o próprio NDK. Logo após nós compilamos os arquivos C++ existentes no programa exemplo. Se você quiser saber quais são esses arquivos, acesse a pasta “jni” e abra o único arquivo com extensão “.c”. Nesse arquivo está o código nativo que foi compilado. Se tudo der certo, aparecerá no Cygwin mais ou menos isso que a Figura 3 mostra.

Depois dos arquivos em C++ terem sido compilados, agora basta você executar o aplicativo no Eclipse. Para isso, clique na opção “File” no menu superior do Eclipse, selecione “New” e clique em “Other …”. Na janela que aparecer, mostrada na Figura 4, abra a pasta “Android”, selecione “Android Project from Existing Code” e clique em “Next”.

Figura 4 – Inserindo o projeto no Eclipse

Na próxima tela, em “Root Directory”, abra a pasta “samples”, dentro da pasta do NDK, deixe selecionado somente o projeto “hello-jni” e clique em “Finish”. A Figura 5 mostra como a tela precisa ficar. Você acabou de inserir no Eclipse o projeto que você compilou anteriormente. Agora meu amigo, basta você executar o aplicativo exatamente como vimos anteriormente. Se você não sabe como fazer isso, veja esse tutorial. A Figura 6 mostra o aplicativo “Hello World” sendo executado.

Figura 5 – Inserindo o projeto no Eclipse

Figura 6 – Execução do “Hello World”

Nesse tutorial nós vimos como executar a nossa primeira aplicação que faz uso de código nativo em C++ para Android. A princípio eu mostraria alguma coisa da biblioteca Cocos2d-x, mas eu achei importante explicar bem essa parte de compilação de código nativo, para que não haja dúvidas mais para frente. No próximo tutorial eu explicarei sobre os pontos positivos de se utilizar a Cocos2d-x para programar jogos e rodaremos o nosso primeiro aplicativo que pode ser comparado com um bom jogo profissional. =]

Então … isso é tudo por hoje pessoal, nos vemos no próximo tutorial.

Santiago Viertel

Santiago Viertel

Formado em Bacharelado em Ciência da Computação (UDESC), mestre e doutorando em Análise de Algoritmos (UFPR). Foi programador da Céu Games por 8 anos. Possui a preferência por jogos de estratégia e de tiro em primeira pessoa. Jogando bastante DotA 2, Left 4 Dead 2 e Age of Empires II HD.

Send this to a friend