Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010

 
SEGUIR LEYENDO
Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
Desarrollo de Videojuegos
                         Android

Francisco Alcántara
francisco@amnesiagames.cl
Octubre 2010
Desarrollo de Videojuegos Android - Francisco Alcántara 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?
Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
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)
Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
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)
Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
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?
Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
Mejores gráficos no lo es todo

     Tamaño relativo a capacidad de procesamiento
Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
Mejores gráficos no lo es todo

        Tamaño relativo a ventas en 2007
Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
Mejores gráficos no lo es todo

   Gears of War      Mario Kart DS
Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
Mejores gráficos no lo es todo

   Tamaño relativo a ventas en 2007 incluyendo Nintendo DS
Desarrollo de Videojuegos Android - Francisco Alcántara Octubre 2010
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