Ayudantia Android

Desarrollo de Videojuegos Android

Francisco Alcántara francisco@amnesiagames.cl Octubre 2010

Un par de preguntas...

¿Cuantos de ustedes han desarrollado una aplicación Android? ¿Cuantos de ustedes tienen un equipo Android? ¿Cuantos de ustedes saben lo que es Android? ¿Cuantos han escuchado alguna vez el nombre Android?

● ●

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Por qué plataformas móviles
● ● ● ● ●

Si tienen pantallas tan chicas Poco procesador Limites de tamaño Teclado de un celular es malo como joystick Cuando se pueda jugar Crysis en el celular avísenme Pregunta: ¿Sabes cuanto cuesta desarrollar un juego AAA?

Mejores gráficos no lo es todo

Tamaño relativo a capacidad de procesamiento

Mejores gráficos no lo es todo

Tamaño relativo a ventas en 2007

Mejores gráficos no lo es todo

Gears of War

Mario Kart DS

Mejores gráficos no lo es todo

Tamaño relativo a ventas en 2007 incluyendo Nintendo DS

Algunas cifras

iPhone: 79% de los usuarios han comprado al menos un juego Hay más de 100 millones de Nintendo DS en el mundo Sony PSP ha vendido más de 50 millones de dispositivos Nintendo Gameboy y Gameboy Advance en conjunto suman alrededor de 200 millones de unidades
Cifras estimadas el 2009

Las Plataformas Móviles
● ● ● ● ●

Están siempre con el usuario Redes Sociales Altamente conectados Bajos costos de desarrollo Innovación

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Qué es Android?

o mejor dicho....

Quién es Android?

Quién es Android?

En serio

“Android is a software stack for mobile devices that includes an operating system, middleware and key applications”
http://developer.android.com/guide/basics/what-is-android.html

Qué es Android?

Cosas Importantes
● ● ● ● ● ● ● ●

Linux Kernel Dalvik VM SGL y Open GL ES SQLite Se programa en Java Ejecutables = .apk Open Source Notepad Tutorial

Componentes Principales
● ● ● ● ●

Activities Services Intents Views Manifest

Activity Lifecycle

Una Activity tiene tres estados principales:
● ●

Esta activa si está en pantalla (foreground) Está pausada si otra Activity se colocó en frente, pero aún es visible. Esta detenida si otra Activity la obscureció por completo.

Killed no es lo mismo que Destroyed

Activity Lifecycle

Mas Info

Android Developer Guide

Application Fundamentals

http://developer.android.com/guide/topics/fundamentals.html

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

El Estado del Arte en Android

¿Vale la pena desarrollar para Andoid?

¿Qué produjo el Cambio?
● ●

Q4 2009: Aparece Motorola Droid Primer Android 2.0

Mercado dentro del Mundo Android

Distintas versiones de Android:

Mayo 2010; Se estima que para fines de año los dispositivos con android 2.1 superarán el 50%

Mercado dentro del Mundo Android

Primera Generación

Segunda Generación

Android Market

Android Market

Android Market

Android Market

Entonces...
● ●

Hay una gran oportunidad La mala noticia

No en todos los paises se pueden comprar ni vender aplicaciones, entre ellos.... CHILE :( 30 de septiembre: Se anuncia que desarrolladores 20 nuevos países podrán vender, entre los cuales se incluyen Brasil y Argentina.

Pero aún hay esperanzas

Mientras tanto: Admob.com

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Qué Puedo Hacer

Capacidades de los Dispositivos Android
● ● ● ● ● ● ●

Pantalla Touchscreen Acelerómetro GPS Sensor de Orientación Bluetooth Wifi Trackball, Teclado y otros métodos de input no siempre asegurados.

Primera Generación
● ● ● ● ● ●

CPU Arm 400~500Mhz Open GL ES 1.0 – 1.1 + Extensiones Pantalla de 3.2” HVGA 320x480 ~5000 verts/frame @30fps ~1024 verts/frame @60fps Android 1.5 - 1.6

Fuente: Writing Real-Time Games For Android Redux, Chris Puett, Mayo 2010

Segunda Generación
● ● ● ● ● ●

CPU 600Mhz – 1 Ghz Open GL ES 2.0 – 1.1 + Extensiones Pantalla WVGA 480x800 ~27000 verts/frame @30fps FPS limitados por el tamaño de pantalla Android 2.0 – 2.1 – 2.2

Fuente: Writing Real-Time Games For Android Redux, Chris Puett, Mayo 2010

Resultados de Profiler

Fuente: Writing Real-Time Games For Android Redux, Chris Puett, Mayo 2010

Cómo escoger mi target
● ● ●

Todo depende de lo que necesites Android es Backwards-Compatible Características Importantes:
● ● ●

1.6: Pantallas con distinta relación de aspecto 2.0: API de Bluetooth, multitouch Open GL ES

Cool Apps
● ● ● ● ● ● ●

Google Voice Google Googles Sky Map Barcode Scanner Chrome to Phone Abduction Replica Island

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Primeros Pasos

Primero hay que preparar el ambiente de desarrollo:
● ● ● ● ● ● ●

Instalar el ultimo JDK Instalar Eclipse para Java Descargar Android SDK Instalar el Plugin ADT para Eclipse Crear emuladores Ir a Resources > Tutorials > Hello World Instrucciones detalladas en:

http://developer.android.com/sdk/installing.html

¡Manos a la obra!
Ver Tutorial: Hello World aqui

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Y cómo hago un juego?

Primer approach

Crear un View y sobreescribir el método onDraw

public class Tutorial2D extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new Panel(this)); } class Panel extends View { public Panel(Context context) { super(context); } @Override public void onDraw(Canvas canvas) { Bitmap _scratch = BitmapFactory.decodeResource(getResources(), R.drawable.icon); canvas.drawColor(Color.BLACK); canvas.drawBitmap(_scratch, 10, 10, null); } } }

Primer approach
● ● ●

Es lo más simple No tenemos control del thread Poca eficiencia

Segundo Approach
● ●

Extender la clase SurfaceView Ver tutorial en

http://www.droidnova.com/playing-with-graphics-inandroid-part-ii,160.html

● ● ●

Es más complejo Pero tenemos control del thread Sin embargo...

Tiles, tiles y más tiles

El approach anterior funciona si se dibujan pocas imágenes en pantalla Una escena de tiles puede tener más de 30 En dispositivos de primera generación el rendimiento cae considerablemente (~10fps) ¿Que hacemos entonces? Open GL ES al rescate

● ●

● ●

Nuestro Amigo Open GL ES
● ● ● ● ●

Lo básico: usar VBO Vertex Buffer Object GL_EXTENSIONS Texture compression: ATITC, PVRTC, ETC1 Drawing Methods
● ● ●

Quads with orthographic projection VBO quads draw_texture

Nuestro Amigo Open GL ES
● ● ● ● ●

Lo básico: usar VBO Vertex Buffer Object GL_EXTENSIONS Texture compression: ATITC, PVRTC, ETC1 Drawing Methods
● ● ●

Quads with orthographic projection VBO quads draw_texture

Pero alguien ya lo debe haber resuelto
¿Cierto?

SI

....quién?
● ● ●

Replica Island: http://www.replicaisland.net/ PROS:
● ●

Open Source Funciona en todos los dispositivos Alta complejidad Poca documentación Cero tutoriales

CONTRAS:
● ● ●

...quien más?
● ● ●

ROKON http://www.rokonandroid.com/ PROS:
● ● ● ●

Facil de comenzar a usar Documentado Box 2D Casos de Exito: Drop Block No hay tutoriales avanzados No tiene motor de Tiles

CONTRAS:
● ●

...y algún otro?
● ● ●

ANGLE http://code.google.com/p/angle/ PROS:
● ●

Varios ejemplos Tiene motor de Tiles Motor de física pobre No encontré casos de éxito

CONTRAS:
● ●

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Agenda del Dia
● ● ● ● ● ● ●

Por qué hacer juegos para plataformas móviles Qué es Android El estado del arte en Android Qué puedo hacer Primeros pasos Y cómo hago un juego? MMMMMM??? Tips and Tricks (… and DON'T's)

Tips and Tricks (… and DON'T's)

2 reglas generales de eficiencia:
● ●

No hagas trabajo que no necesitas No pidas memoria si puede evitarlo Evite crear objetos
– –

Algunos Consejos:

Los objetos no son gratis, usan memoria Un arreglo de ints es mejor que un arreglo de Integers 15% a 20% más rápido

Prefiera static en vez de virtual

Haga sus contantes final

Más Consejos de Performance

Evite Getters y Setters internos

3x más rápido

● ●

Evite usar enum Evite usar floats

Responsiveness

ANR of Death

Responsiveness

Cuándo se ejecuta el ANR

No hay respuesta a un input event durante 10 segundos Un BroadcastReceiver no termina su ejecución en 5 segundos Usar Threads!

Conclusión Clave

Desarrollo de Videojuegos Android

Francisco Alcántara francisco@amnesiagames.cl Octubre 2010

Referencias

http://developer.android.com/index.html
http://code.google.com/events/io/2010/sessions.html#Android
http://www.droidnova.com/playing-with-graphics-in-android-part-ii,160.html

Sign up to vote on this title
UsefulNot useful