380 likes | 674 Views
Programación de Juegos Móviles con J2ME. Fernando Sansberro Exposición de Videojuegos Argentina 19-20 Septiembre 2003. Contenido. La Industria de Juegos Móviles. Las Herramientas de Desarrollo. Desarrollo de Juegos Móviles. Programación Java con J2ME / MIDP 1.0.
E N D
Programación de Juegos Móviles con J2ME Fernando Sansberro Exposición de Videojuegos Argentina 19-20 Septiembre 2003
Contenido • La Industria de Juegos Móviles. • Las Herramientas de Desarrollo. • Desarrollo de Juegos Móviles. • Programación Java con J2ME / MIDP 1.0. • APIs de Teléfonos y MIDP 2.0. • Conclusiones. Programación de Juegos Móviles con J2ME - EVA 2003
La Industria de Juegos MóvilesCaracterísticas • Se encuentra en su infancia. • Juegos desde Pacman hasta RPG multijugador. • Esperando un juego que revolucione ($$$). Programación de Juegos Móviles con J2ME - EVA 2003
La Industria de Juegos MóvilesDesarrollador • Es una gran oportunidad. • Costos de producción muy bajos. • ¡Es como en los años ’80! • En casa se puede hacer un juego comercial. • Grupo de 2-3 personas 2-3 meses. • Tecnología al alcance y manejable. • Accesible para desarrolladores independientes. • ¡El sueño del desarrollador independiente! Programación de Juegos Móviles con J2ME - EVA 2003
La Industria de Juegos MóvilesActores • Developers (juego). • Publishers (entre developer y carrier). • Carriers (aire=red). • Manufacturers (teléfonos). Programación de Juegos Móviles con J2ME - EVA 2003
Las Herramientas de DesarrolloLenguajes • Lenguajes posibles: • Java • C++ • Programación Orientada a Objetos. • Mucho material en la web: tutoriales, libros online, artículos, forums, código fuente, etc. Programación de Juegos Móviles con J2ME - EVA 2003
Las Herramientas de Desarrollo¿Cuales son? • Java • J2ME (Java 2 Micro Edition) • MIDP 1.0, MIDP 2.0, APIs fabricantes • ExEn • WGE • C++ • Mophun • Brew Programación de Juegos Móviles con J2ME - EVA 2003
Las Herramientas de DesarrolloElegir Plataforma • J2ME • 75 millones de teléfonos. • No tiene modelo de negocios. • Nokia, Motorola, Siemens, Samsung... • ExEn • Modelo de negocios y mejor API. • Panasonic, Alcatel, Siemens, Philips, Vitelcomm. • BREW • 5 millones de teléfonos. Programación de Juegos Móviles con J2ME - EVA 2003
Las Herramientas de DesarrolloJ2ME • Sun J2ME (Java 2 Micro Edition). • Sun J2ME Wireless Toolkit 2.0. • IDE (JCreator, Sun ONE Studio, etc.). • SDKs y APIs de fabricantes. • Emuladores. • Teléfonos. Programación de Juegos Móviles con J2ME - EVA 2003
Las Herramientas de DesarrolloJ2ME - Tecnologías • J2ME es un subconjunto de J2SE. • MIDP (Mobile Information Device Profile): • Conjunto de estándares para fabricantes de dispositivos definiendo memoria, teclas, tamaño de display, etc. • Actualmente MIDP 1.0. • MIDP 2.0 contiene transparencia, full screen, sprites, tiled layers, sonido, etc. Programación de Juegos Móviles con J2ME - EVA 2003
Desarrollo de Juegos MóvilesVentajas • Todos tienen un teléfono celular. • Hay millones de potenciales compradores. • Por ejemplo, Nokia piensa tener en el mercado entre 50 y 100 millones de teléfonos J2ME/Color para fines del 2003. • Sencillo comparado con otras plataformas. • Juegos chicos. Programación de Juegos Móviles con J2ME - EVA 2003
Desarrollo de Juegos MóvilesDiseñando un Juego... • La persona lleva el teléfono consigo a todos lados. • Juega mientras espera el omnibus, el tren, en la clase aburrida, etc. • Se juega en sesiones cortas. • Es fácilmente interrumpible (implementar autosave). • Masivo, fácil de entender, etc. Programación de Juegos Móviles con J2ME - EVA 2003
Desarrollo de Juegos MóvilesFactores en contra • Hay que trabajar con recursos limitados. • Tamaño del display. • Diferentes capacidades de los dispositivos. • Interface del juego (teclas). • No hay punto flotante en MIDP. • Hay que usar API para cada fabricante (hoy). • No hay acceso a pixels, rotaciones, scaling, etc. • Hay que optimizar memoria, ejecución, .jar, etc. Programación de Juegos Móviles con J2ME - EVA 2003
Desarrollo de Juegos MóvilesVariedad de Dispositivos • Tamaño del display (ejemplo: Miki’s World) Serie 30 - 96x65 Serie 40 - 128x128 Serie 60 - 176x208 • Cantidad de colores Blanco y Negro (Solo Serie 30). 4096 Colores (12 bits) (Serie 30, 40 y 60). Programación de Juegos Móviles con J2ME - EVA 2003
Desarrollo de Juegos MóvilesVariedad de Dispositivos Ejemplo: Nokia Serie 30 Serie 40 Serie 60 • Heap memory 200 K - 255 K 200 K 1.4 Mb • Record Management System 140 K - 600 K 725 K – 4 Mb 4 Mb • Máximo tamaño del archivo .JAR 32 K – 64 K 64 Kb 4 Mb Programación de Juegos Móviles con J2ME - EVA 2003
Desarrollo de Juegos MóvilesTeclados Diferentes SERIE 40 NO SOPORTA TECLAS SIMULTANEAS Programación de Juegos Móviles con J2ME - EVA 2003
Desarrollo de Juegos MóvilesTeclados Diferentes NOKIA 3300 Programación de Juegos Móviles con J2ME - EVA 2003
Desarrollo de Juegos MóvilesTeclados Diferentes NOKIA 3650 Programación de Juegos Móviles con J2ME - EVA 2003
Desarrollo de Juegos MóvilesTeclados Diferentes NOKIA N-GAGE Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Componentes a Desarrollar • Sistema de sprites. • Mapa de tiles. • Game loop (Thread). • Menú del juego. • High score, Instrucciones, etc. (state machine). • Animación inicial y carga de imágenes (Thread). • Inteligencia Artificial. • Multiplayer. • Optimizar el código. Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Proceso de Desarrollo • Preparar los documentos de especificación ayuda a evitar problemas mas tarde. • Game Design Specification. • Technical Design Specification. • Budget / Schedule. • Plan de Testing. Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Cómo es un MIDlet // HelloGameMIDlet.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class HelloGameMIDlet extends MIDlet { private GameCanvas gameCanvas; private Display display; public HelloGameMIDlet() { gameCanvas = new GameCanvas(); } protected void startApp() { display = Display.getDisplay(this); display.setCurrent(gameCanvas); gameCanvas.repaint(); gameCanvas.serviceRepaints(); } protected void pauseApp() {} protected void destroyApp(boolean u) {} } Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Cómo es un MIDlet // GameCanvas.java import javax.microedition.lcdui.*; class GameCanvas extends Canvas { public void paint(Graphics g) { g.setColor(0x000000); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0xFFFFFF); g.drawString("Hello Game!", getWidth() / 2, getHeight() / 2, Graphics.HCENTER | Graphics.TOP); } } Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Double Buffer Image buffer = null; Graphics gOff = null; // En el constructor del Canvas... if (!isDoubleBuffered()) { buffer = Image.createImage(getWidth(), getHeight()); } Public void paint(Graphics g) { Graphics gr = (buffer != null) ? buffer.getGraphics() : g; dibujarFrame(gr); if (buffer != null) { gr.drawImage(buffer, 0, 0, Graphics.TOP | Graphics.LEFT); } } Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Game Loop public class GameThread extends Thread { public void run() { while(running) { long time = System.currentTimeMillis(); moveSprites(); checkCollision(); repaint(); serviceRepaints(); time = System.currentTimeMillis() - time; try { if (time < DELAY) Thread.sleep(DELAY-(int)time); } catch( Exception) {} } } } Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Optimizar tamaño del .JAR • El juego se distribuye OTA como un MIDlet (archivos .jad y .jar) – ~64K. • Obfuscation. • Además hace difícil la Ingeniería Reversa. • No crear demasiadas clases ni packages. Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Optimizar tamaño del .JAR • Poner todos los gráficos en una sola imágen. • Los gráficos son .PNG. • Stripping. Header Datos Header Datos Header Datos Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Levantar los frames Graphics g; Image imagenTiles; try { imagenTiles = Image.createImage("/graphics.png"); } catch (Exception e) {error();} try { for (int i=0; i<50; i++) { sprite[i] = Image.createImage(8, 8); g = sprite[i].getGraphics(); g.drawImage(imagenTiles, -((i%10)*8), -((i/10)*8), Graphics.TOP|Graphics.LEFT); } } catch (Exception e) {error();} Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Optimizar tamaño del código Public abstract class Base { protected int value; public abstract void setValue(int v); } Public class Ext1 extends Base { public void setValue(int v) { value = v; } } Public class Ext2 extends Base { public void setValue(int v) { value = v * v; } } Public class Base { public static final int EXT1 = 0; public static final int EXT2 = 1; private int type; private int value; public Base(int t) {type = t;} public void setValue(int v) { switch(type) { case EXT1: value = v; break; case EXT2: value = v * v; break; } } } Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Garbage Collector • En Java hay un thread del sistema que libera la memoria cuando no se referencia más un objeto. miObjeto = null; System.gc(); • No se puede hacer new() dentro del juego porque es muy costoso. • Implementar Pool de objetos. Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Optimizaciones • Dirty Rectangles. • Usar char[ ] en lugar de String y StringBuffer (hay que escribir rutinas de conversión a y desde int, por ejemplo). • Usar arrays en lugar de HashTable y Vector. • Minimizar el uso de clases. • Reducir las invocaciones (no usar interface). • Usar métodos final. Programación de Juegos Móviles con J2ME - EVA 2003
Programación con J2ME / MIDP 1.0Ultimos detalles • Que cumpla con las “Usability Guides”. • Internacionalización (idiomas). • Certificación da acceso a los mejores lugares de exposición para vender. Programación de Juegos Móviles con J2ME - EVA 2003
APIs de Teléfonos y MIDP 2.0¿Qué trae MIDP 2.0? • Game API: • Clase GameCanvas. • Clase Layer (abstracta: Sprite o Tile). • Clase Sprite. • Clase TiledLayer (Mapa de tiles). • Clase LayerManager. • Full screen. • Audio (MIDP 2.0 Media API es un subconjunto de Mobile Media API, JSR 135). • Graphics.FillTriangle (3D engine básico). Programación de Juegos Móviles con J2ME - EVA 2003
APIs de Teléfonos y MIDP 2.0¿Qué traen las APIs? • Full Canvas. • Transparencia (Mask y Alpha Channel). • Sprites. • Layers (Mapas de Tiles). • Sonido (WAV, .MIDI o Ring Tones). • Otros (Vibración, Rotación de imágenes, etc). Programación de Juegos Móviles con J2ME - EVA 2003
Conclusiones • Es una gran oportunidad. • Herramientas al alcance. • Se necesita ser muy disciplinado. • Diseñar primero (modelos de teléfonos). • Programar un juego es sencillo. • Que corra bien en el teléfono no es fácil pero una vez que se desarrollaron los componentes es sencillo. • Emuladores y teléfonos. Programación de Juegos Móviles con J2ME - EVA 2003
Preguntas yRespuestas Programación de Juegos Móviles con J2ME - EVA 2003
Contacto Fernando Sansberro fdsp@adinet.com.uy Programación de Juegos Móviles con J2ME - EVA 2003