Sobre el autor
Sobre el revisor técnico
Introducción
Unas palabras sobre el público a quién va dirigido esta obra
Cómo está organizado el libro
Convenciones
Código fuente
1. Android, el nuevo chico del barrio
Una pequeña historia sobre Android
Fragmentación
El papel de Google
Android: el proyecto en código abierto
Android Market
Desafíos, dispositivos y Google I/O
Propiedades y arquitectura de Android
El kernel
El tiempo de ejecución y Dalvik
Las librerías del sistema
El framework de la aplicación
El kit para el desarrollo de software
La comunidad de desarrolladores
Dispositivos, dispositivos, dispositivos
Hardware
Primera generación, segunda generación y la próxima generación
Los juegos para móviles son diferentes
Una máquina de juegos en cada bolsillo
Estar siempre conectado
Jugadores casuales y fijos
Un mercado grande para pequeños desarrolladores
Resumen
2. Primeros pasos con Android SDK
Configurar el entorno de desarrollo
Configurar el JDK
Configurar el kit Android SDK
Instalar Eclipse
Instalar el complemento ADT para Eclipse
Una visita rápida por Eclipse
Hello World, el estilo Android
Crear el proyecto
Explorar el proyecto
Escribir el código de la aplicación
Ejecutar y depurar aplicaciones Android
Conectar un dispositivo
Crear un dispositivo virtual Android
Ejecutar una aplicación
Depurar una aplicación
LogCat y DDMS
Usar ADB
Resumen
3. 101 formas de desarrollar juegos
Géneros: uno para cada gusto
Juegos casuales
Los rompecabezas
Juegos arcade y de acción
Juegos de estrategia
Innovación
Diseñar un juego: el papel es más poderoso que el código
Mecánica del juego
Una historia y el estilo del arte
Pantallas y transiciones
El código
La aplicación y el gestor de la ventana
Entrada
Archivo de E/S
Audio
Gráficos
El framework para juegos
Resumen
4. Android para desarrolladores de juegos 5. Framework para desarrollar juegos de Android 6. Mr. Nom invade Android 7. Introducción a OpenGL ES 8. Trucos para programar juegos 2D 9. Super Jumper: un juego 2D en OpenGL ES 10. OpenGL ES: bienvenido a las 3D 11. Trucos para programar en 3D 12. Droid Invaders: el gran final 13. Publicar el juego 14. Y ahora, ¿qué?
Definir una aplicación Android: el archivo declarativo
El elemento
El elemento
El elemento
El elemento
El elemento
El elemento
Configurar el juego de Android en 10 pasos
Definir el icono del juego
Conceptos básicos de la API de Android
Crear un proyecto de prueba
El ciclo vital de la actividad
Gestionar el dispositivo de entrada
Gestión de archivos
Programar el audio
Reproducir efectos sonoros
Streaming de música
Programación de gráficos básicos
Forma de trabajar recomendada
Resumen
Plan de ataque
La clase AndroidFileIO
AndroidAudio, AndroidSound y AndroidMusic
AndroidInput y AccelerometerHandler
AccelerometerHandler
La clase Pool
KeyboardHandler
Controladores táctiles
AndroidInput
AndroidGraphics y AndroidPixmap
Controlar diferentes tamaños de pantallas y sus resoluciones
AndroidPixmap
AndroidGraphics
AndroidFastRenderView
AndroidGame
Resumen
Crear los recursos del juego
Configurar el proyecto
MrNomGame: la actividad principal
Recursos: un almacén para ellos
Configuración: registrar las puntuaciones máximas y las opciones del usuario
LoadingScreen: recuperar los recursos almacenados en un disco
La pantalla del menú principal
Las clases HelpScreen
La pantalla de las puntuaciones máximas
Dibujar los números
Implementar la pantalla Screen
Abstracción
Abstraer el mundo de Mr. Nom: Modelo, Vista y Controlador
La clase GameScreen
Resumen
¿Qué es OpenGL ES y por qué es importante?
Una analogía para explicar el modelo de programación
Proyecciones
El espacio de los dispositivos normalizados y la ventana de visualización
Matrices
El flujo de trabajo del dibujo
Antes de empezar
GLSurfaceView
GLGame
Mira mamá ¡tengo un triángulo rojo!
Definir la ventana de visualización
Definir la matriz de proyección
Especificar triángulos
Combinarlo todo
Especificar el color de cada vértice
Conversión de texturas
Coordenadas de la textura
Cargar mapas de bits
Filtrar texturas
Liberar texturas
Un fragmento de código muy útil
Activar la textura
Combinarlo todo
Una clase Texture
Vértices indexados
Combinarlo todo
Una clase Vertices
Mezcla del canal alfa
Más primitivas: puntos, líneas, trazos y abanicos
Transformaciones 2D: divertirse con la matriz modelo-vista
El espacio del mundo y el espacio del modelo
De nuevo las matrices
Un primer ejemplo usando la traslación
Más transformaciones
Optimización de cara al rendimiento
Medir la frecuencia de muestreo
El curioso caso de Hero en Android 1.5
¿Por qué es tan lento el dibujo con OpenGL ES?
Prescindir de todos los cambios de estado que no sean necesarios
Reducir el tamaño de la textura implica recuperar menos píxeles
Reducir las llamadas a los métodos OpenGL ES/JNI
El concepto de asociar vértices
En conclusión
Resumen
Antes de empezar
El vector
Trabajar con vectores
Un poco de trigonometría
Implementar una clase Vector
Un ejemplo sencillo
Un poco de física en 2D
Newton y Euler, a partir de ahora nuestros mejores amigos
Fuerza y Masa
Experimentar, desde el punto de vista teórico
Experimentar, desde el punto de vista práctico
Detección de colisiones y representación de objetos en 2D
Formas envolventes
Construir formas envolventes
Atributos de los objetos del juego
Detección de colisiones de fase ancha y estrecha
Un ejemplo elaborado
Una cámara en 2D
La clase Camera2D
Un ejemplo
Mapa de texturas: por qué compartir es importante
Un ejemplo
Ocultar OpenGL ES con regiones de texturas, modelos y lotes
La clase TextureRegion
La clase SpriteBatcher
Animación de modelos
La clase Animation
Un ejemplo
Resumen
Mecánicas del juego
Una historia y el estilo del arte
Pantallas y transiciones
Definir el mundo virtual del juego
Crear los recursos
Los elementos de la interfaz del usuario
Trabajar con texto empleando fuentes bitmap
Los elementos del juego
Mapa de texturas
Música y sonido
Implementar Super Jumper
La clase Assets
La clase Settings
La actividad principal
La clase Font
GLScreen
La pantalla del menú principal
Las pantallas de ayuda
La pantalla de las puntuaciones máximas
Las clases responsables de la simulación
La pantalla del juego
La clase WorldRenderer
Optimizar o no optimizar
Resumen
Antes de empezar
Los vértices en 3D
Vertices3: almacenar posiciones 3D
Un ejemplo
Proyección en perspectiva: cuanto más cerca, más grande
El z-buffer: poner orden en el caos
Corregir el último ejemplo
Mezcla de color: no hay nada detrás
Precisión de z-buffer y z-fighting
Definir mallas 3D
Un cubo: Hello World en 3D
Un ejemplo
De nuevo, matrices y transformaciones
La pila de matrices
Sistemas jerárquico con la pila de matrices
Combinarlo todo
Un sistema de cámara sencilla
Resumen
Antes de empezar
Vectores en 3D
La iluminación en OpenGL ES
Cómo funciona la iluminación
Fuentes luminosas
Materiales
Cómo calcula OpenGL ES la iluminación: la normal de un vértice
Parte práctica
Algunas notas sobre la iluminación en OpenGL ES
Mipmapping
Las cámaras
La cámara de Euler o la cámara en primera persona
Ejemplo de una cámara de Euler
Una cámara de seguimiento
Cargar modelos
El formato Wavefront OBJ
Implementar un cargador OBJ
Usar el cargador de OBJ
Algunos comentarios sobre la carga de modelos
Un poco de física aplicada al espacio 3D
Detección de colisiones y representación de objetos en el espacio 3D
Formas envolventes en 3D
Probar el solapamiento de una esfera envolvente
GameObject3D y DynamicGameObject3D
Resumen
Las mecánicas del juego
La historia que hay detrás del juego y el estilo del arte
Las pantallas y las transiciones
Definir el mundo virtual del juego
Crear los recursos del juego
Los recursos de la interfaz del usuario
Los recursos del juego
Sonido y música
Plan de ataque
La clase Assets
La clase Settings
La actividad principal del juego
La pantalla del menú principal
La pantalla de configuración
Las clases de simulación
La clase Shield
La clase Shot
La clase Ship
La clase Invader
La clase World
La clase GameScreen
La clase WorldRender
Optimización
Resumen
Una pequeña anotación sobre las pruebas
Convertirse en un desarrollador registrado
Firme el archivo APK de su juego
Publicar el juego en Android Market
Cargar recursos
Mostrar los detalles
Opciones de publicación
Publicar
Marketing
La consola del desarrollador
Resumen
Redes sociales
Una advertencia sobre la ubicación
Capacidad para trabajar con varios jugadores
OpenGL ES 2.0 y más
Framework y motores
Recursos en la Web
Un alfabético