Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
←
→
Transcripción del contenido de la página
Si su navegador no muestra la página correctamente, lea el contenido de la página a continuación
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?
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 :( ● Pero aún hay esperanzas ● 30 de septiembre: Se anuncia que desarrolladores 20 nuevos países podrán vender, entre los cuales se incluyen Brasil y Argentina. ● 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-in- android-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 ● CONTRAS: ● Alta complejidad ● Poca documentación ● Cero tutoriales
...quien más? ● ROKON ● http://www.rokonandroid.com/ ● PROS: ● Facil de comenzar a usar ● Documentado ● Box 2D ● Casos de Exito: Drop Block ● CONTRAS: ● No hay tutoriales avanzados ● No tiene motor de Tiles
...y algún otro? ● ANGLE ● http://code.google.com/p/angle/ ● PROS: ● Varios ejemplos ● Tiene motor de Tiles ● CONTRAS: ● Motor de física pobre ● No encontré casos de éxito
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 ● Algunos Consejos: ● Evite crear objetos – Los objetos no son gratis, usan memoria – Un arreglo de ints es mejor que un arreglo de Integers ● Prefiera static en vez de virtual – 15% a 20% más rápido ● 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 ● Conclusión Clave ● Usar Threads!
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
También puede leer