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 2009Las 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.htmlQué 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 DestroyedActivity Lifecycle
Mas Info
● Android Developer Guide
● Application Fundamentals
http://developer.android.com/guide/topics/fundamentals.htmlAgenda 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.comAgenda 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 2010Segunda 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 2010Resultados 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 ESCool 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 rescateNuestro 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_textureNuestro 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_texturePero 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 éxitoAgenda 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 finalMás Consejos de Performance
● Evite Getters y Setters internos
● 3x más rápido
● Evite usar enum
● Evite usar floatsResponsiveness 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 2010Referencias ● 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