Tutorial: Utilizando os acelerômetros no Cocos2d-x

Aposto que, nessa altura do campeonato, você deve estar como nunca querendo saber como utilizar o acelerômetro do celular em jogos. O que você acha de aprender isso hoje? ;D

No último tutorial eu mostrei mais uma das várias funcionalidades do Tiled. Vimos como automatizar a criação de áreas de colisão para essas serem utilizadas na programação do game. Nesse tutorial eu não falarei do Tiled e será um tutorial único. Falaremos como utilizar o acelerômetro e comentarei no final algumas ideias de onde ele pode ser aplicado em games. Bora lá?

 

Funcionamento do Acelerômetro

Antes de sairmos para o código, seria interessante eu mostrar como funcionam os acelerômetros dos aparelhos Android em geral. Os acelerômetros são dispositivos eletrônicos que detectam variação de movimento em um certo eixo do celular. Ao contrário do que muita gente imagina, eles não identificam gravidade e muito menos a posição espacial do aparelho. Quando você mexe o celular, os seus acelerômetros detectam essa movimentação.

Nos aparelhos modernos, existem um total de três acelerômetros: um detecta movimentação no eixo X, outro no Y e outro no Z. Mas como assim: eixos X, Y e Z? Explicar-lhe-ei (olhaaa) como funciona.

Figura 1: Eixos X, Y e Z no aparelho

Figura 1: Eixos X, Y e Z no aparelho

Se você estiver olhando o celular em pé e girá-lo na vertical, você movimentará o acelerômetro que detecta movimentação no eixo Y. Se você girá-lo na horizontal, você movimentará o acelerômetro do eixo X. Se você girá-lo como um volante, você movimentará o acelerômetro do eixo Z. Simples, não? Você entenderá melhor o funcionamento olhando a Figura 1. Mas como fazemos isso no Cocos2d-x?

 

Detectando movimento no aparelho com o Cocos2d-x

Para que você possa detectar qualquer movimentação nos acelerômetros, você precisa primeiramente acioná-los no código. Essa funcionalidade sempre inicia desligada, para evitar consumo desnecessário de bateria. Para isso, abra o arquivo “HelloWorldScene.cpp”. Aconselho vocês a criarem um novo projeto no Cocos2d-x. Se vocês não lembram como, façam esse tutorial.

No arquivo aberto, logo abaixo da seguinte linha de código:

this->addChild(pSprite, 0);

adicionem essa linha:

setAccelerometerEnabled(true);

Vocês acabaram de acionar os acelerômetros do aparelho. Agora para capturar qualquer movimento que você realiza, adicione as seguintes linhas de código no final do arquivo:

void HelloWorld::didAccelerate(CCAcceleration *pAccelerationValue) {

CCLOG(“X: %.2f”,pAccelerationValue->x);

}

Quando vocês acionaram os acelerômetros, quando acontecer qualquer mudança na movimentação do celular, o Cocos2d-x chamará o método didAccelerate, da classe CCLayer. Dentro do método, nós realizamos a chamada da função CCLOG, que mostra uma informação qualquer para depuração. Nesse caso, estamos mostrando o valor de angulação do aparelho no eixo X (pAccelerationValue->x).

Para que essas mudanças deem resultado, precisamos dizer que o método didAccelerate está implementado no arquivo HelloWorldScene.cpp. Para isso, abra o arquivo “HelloWorldScene.h” e adicione a seguinte linha de código:

void didAccelerate(cocos2d::CCAcceleration *pAccelerationValue);

logo abaixo da linha de código:

CREATE_FUNC(HelloWorld);

Com isso nós já podemos utilizar as informações vindas dos acelerômetros, mas não aparecerão os valores de angulação do eixo X, como queríamos. Isso porque não estamos compilando o programa para depuração. Para fazermos isso, adicione no arquivo “HelloWorldScene.h” a seguinte linha de código:

#define COCOS2D_DEBUG 1

logo abaixo dessa linha:

#include “cocos2d.h”

Agora, quando você compilar e executar o programa, você verá a angulação do eixo X no LogCat, na parte inferior do Eclipse. A Figura 2 mostra o valor de angulação do eixo X para aproximadamente 30 graus com uma mesa perfeitamente na horizontal. Agora basta vocês utilizarem os valores dos eixos para o que vocês bem entenderem. o/

Figura 2: Angulação no Eixo X

Figura 2: Angulação no Eixo X

Podemos utilizar os valores dos acelerômetros para muitos tipos de jogos. Jogos de carro, para funcionar como volantes; jogos de nave, para movimentá-la na tela e por aí vai. Acho que ainda vou fazer um tutorial sobre um game que usa acelerômetros, que tal?

Nesse tutorial nós vimos como utilizar os acelerômetros de um aparelho Android com o Cocos2d-x. Vimos que existem três eixos diferentes para detectar essa movimentação e que existe uma angulação referente a cada eixo. Lemos uma angulação e a mostramos na tela. No próximo tutorial eu criarei uma sequência que explica como programarmos jogos com o motor físico Box2D. Mas isso é assunto para depois.

Um grande abraço e até mais. []

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