You are on page 1of 24

Desenvolvimento de games

Desenvolvendo jogos 2D e 3D com OpenGL ES para Android


Andr Santee @decosantee

Intro
Sou desenvolvedor de games Minha principal rea de atuao na criao de engines e programao de GPU (shaders) Trabalho na Jera Software gil L desenvolvo games de Android em Java/C++ Trabalhando em engine C++ que permita trabalhar com Android, iPhone e Windows simultaneamente (crosscompilation)

Objetivo
Fornecer uma viso geral do desenvolvimento de jogos para Android Quais ferramentas usar Por onde comear

Vikings vs Zombies
Tower defense feito para estudo. 1 game lanado pela Jera

Vantagens em desenvolver para Android


-Utiliza linguagens populares e bem difundidas (Java/XML/C++) -Desenvolvimento em Linux, Windows e Mac -tima documentao -Tudo gratuito -Distribuio e venda de app's descomplicada e sem burocracia

Desenvolvimento
Ferramentas: Eclipse + ADT Emulador (AVD) ou deploy direto no dispositivo

Comeando um projeto
Questes para desenvolvedores de jogos
Delimitar muito bem quais recursos o game ir utilizar: touchscreen/multi-touch D-Pad teclado fsico acelerometro resolues de tela suportadas Saiba qual gerao focar: Primeira gerao? Segunda gerao?

Primeira gerao (1.5 / 1.6)


~400mhz GPU integrada com suporte a OpenGL 1.1 ~5000 vrtices/quadro a 30 FPS 1.5 possui limitaes em multitouch a diferentes resolues de tela menos de 10% do mercado atualmente*
* de acordo com as estatsticas de download do VVZ

Android G1 / HTC myTouch

Segunda gerao (2.1+)


~600mhz GPU integrada com suporte a OpenGL 2.0 ~27000 vrtices/quadro a 30 FPS aproximadamente 80% do mercado atualmente* Milestone GalaxyS Xperia

* de acordo com as estatsticas de download do VVZ

Programando o jogo

Desenvolver games != desenvolver para web Esteja pronto para novos paradigmas

Funcionamento bsico de um jogo

Aplicando no Android

Um pouco de cdigo...
public class GLSurfaceViewActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGLSurfaceView = new GLSurfaceView(this); mGLSurfaceView.setRenderer(new MeuGameFantastico(false)); setContentView(mGLSurfaceView); } protected void onResume() { super.onResume(); mGLSurfaceView.onResume(); } protected void onPause() { super.onPause(); mGLSurfaceView.onPause(); } private GLSurfaceView mGLSurfaceView; }

Um pouco de cdigo...
class MeuGameFantastico implements GLSurfaceView.Renderer { public void onSurfaceCreated(GL10 gl, EGLConfig config) { // carrega os grficos e recursos do meu game fantstico } public void onDrawFrame(GL10 gl) { // desenha meus grficos fantsticos } public void onSurfaceChanged(GL10 gl, int width, int height) { // atualiza a tela do meu game fantstico } }

API grfica? Pra que isso, manolo?

OpenGL
OpenGL a API grfica com maior abrangencia no mercado atualmente: Windows, Linux, Mac, etc. OpenGL ES mira sistemas embarcados e outras plataformas mais simples: Android, iPhone, WebGL, ... OpenGL cuida da "conversa" do seu cdigo (normalmente C/C++) com a GPU para acelerar renderizao 2D* e 3D.

OpenGL - a "cara" da criana


glEnable(GL_BLEND); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLE_FAN); glVertex3f(v[0].x, v[0].y, v[0].z); glVertex3f(v[1].x, v[1].y, v[1].z); glVertex3f(v[2].x, v[2].y, v[2].z); glEnd();

OpenGL ES 2.0 pipeline

O que aprendemos com o VVZ


Games podem se "auto-promover"

O que aprendemos com o VVZ


Esteja pronto para uma infinidade de dispositivos diferentes... :'(

O que aprendemos com o VVZ


J vale a pena investir na 2 gerao (OpenGL ES 2.0)

O que aprendemos com o VVZ


Cada usurio cria suas prprias expectativas. Agradar a todos ou focar um pblico especfico?

Novas tendncias
A capacidade de processamento vai crescer bastante (bom para GLES 2.0) A API nativa j permite desenvolver inteiramente em C++ (udio, input e vdeo) Desenvolver o game pensando em mltiplas plataformas! Pense nisso...

Game Over
asantee.net @decosantee