programación de juegos móviles con j2me

38
Programación de Programación de Juegos Móviles con Juegos Móviles con J2ME J2ME Fernando Sansberro Exposición de Videojuegos Argentina 19-20 Septiembre 2003

Upload: heath

Post on 14-Feb-2016

58 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programación de Juegos Móviles con J2ME

Programación de Juegos Programación de Juegos Móviles con J2MEMóviles con J2ME

Fernando Sansberro

Exposición de Videojuegos Argentina19-20 Septiembre 2003

Page 2: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 2

ContenidoContenido 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.

Page 3: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 3

La Industria de Juegos MóvilesLa Industria de Juegos MóvilesCaracterísticasCaracterísticas

Se encuentra en su infancia. Juegos desde Pacman hasta RPG multijugador. Esperando un juego que revolucione ($$$).

Page 4: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 4

La Industria de Juegos MóvilesLa Industria de Juegos MóvilesDesarrolladorDesarrollador

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!

Page 5: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 5

La Industria de Juegos MóvilesLa Industria de Juegos MóvilesActoresActores

Developers (juego).

Publishers (entre developer y carrier).

Carriers (aire=red).

Manufacturers (teléfonos).

Page 6: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 6

Las Herramientas de DesarrolloLas Herramientas de DesarrolloLenguajesLenguajes

Lenguajes posibles: Java C++

Programación Orientada a Objetos. Mucho material en la web: tutoriales, libros

online, artículos, forums, código fuente, etc.

Page 7: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 7

Las Herramientas de DesarrolloLas Herramientas de Desarrollo¿Cuales son?¿Cuales son?

Java J2ME (Java 2 Micro Edition)

MIDP 1.0, MIDP 2.0, APIs fabricantes ExEn WGE

C++ Mophun Brew

Page 8: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 8

Las Herramientas de DesarrolloLas Herramientas de DesarrolloElegir PlataformaElegir 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.

Page 9: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 9

Las Herramientas de DesarrolloLas Herramientas de DesarrolloJ2MEJ2ME

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.

Page 10: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 10

Las Herramientas de DesarrolloLas Herramientas de DesarrolloJ2ME - TecnologíasJ2ME - 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.

Page 11: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 11

Page 12: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 12

Desarrollo de Juegos MóvilesDesarrollo de Juegos MóvilesVentajasVentajas

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.

Page 13: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 13

Desarrollo de Juegos MóvilesDesarrollo de Juegos MóvilesDiseñando un Juego...Diseñ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.

Page 14: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 14

Desarrollo de Juegos MóvilesDesarrollo de Juegos MóvilesFactores en contraFactores 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.

Page 15: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 15

Desarrollo de Juegos MóvilesDesarrollo de Juegos MóvilesVariedad de DispositivosVariedad 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).

Page 16: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 16

Desarrollo de Juegos MóvilesDesarrollo de Juegos MóvilesVariedad de DispositivosVariedad de Dispositivos

Ejemplo: NokiaSerie 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

Page 17: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 17

Desarrollo de Juegos MóvilesDesarrollo de Juegos MóvilesTeclados DiferentesTeclados Diferentes

SERIE 40

NO SOPORTA TECLASSIMULTANEAS

Page 18: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 18

Desarrollo de Juegos MóvilesDesarrollo de Juegos MóvilesTeclados DiferentesTeclados Diferentes

NOKIA 3300

Page 19: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 19

Desarrollo de Juegos MóvilesDesarrollo de Juegos MóvilesTeclados DiferentesTeclados Diferentes

NOKIA 3650

Page 20: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 20

Desarrollo de Juegos MóvilesDesarrollo de Juegos MóvilesTeclados DiferentesTeclados Diferentes

NOKIA N-GAGE

Page 21: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 21

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Componentes a DesarrollarComponentes 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.

Page 22: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 22

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Proceso de DesarrolloProceso 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.

Page 23: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 23

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Cómo es un MIDletCómo es un MIDlet

// HelloGameMIDlet.javaimport 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)

{}}

Page 24: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 24

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Cómo es un MIDletCómo es un MIDlet

// GameCanvas.javaimport 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); }}

Page 25: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 25

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Double BufferDouble 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); }}

Page 26: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 26

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Game LoopGame 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) {} } }}

Page 27: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 27

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Optimizar tamaño del .JAROptimizar 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.

Page 28: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 28

Datos

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Optimizar tamaño del .JAROptimizar tamaño del .JAR

Poner todos los gráficos en una sola imágen. Los gráficos son .PNG. Stripping. DatosHeader

Header

DatosHeader

Page 29: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 29

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Levantar los framesLevantar 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();}

Page 30: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 30

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Optimizar tamaño del códigoOptimizar 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; } } }

Page 31: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 31

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Garbage CollectorGarbage 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.

Page 32: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 32

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0OptimizacionesOptimizaciones

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.

Page 33: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 33

Programación con J2ME / MIDP 1.0Programación con J2ME / MIDP 1.0Ultimos detallesUltimos detalles

Que cumpla con las “Usability Guides”. Internacionalización (idiomas). Certificación da acceso a los mejores lugares

de exposición para vender.

Page 34: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 34

APIs de Teléfonos y MIDP 2.0APIs de Teléfonos y MIDP 2.0¿Qué trae 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).

Page 35: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 35

APIs de Teléfonos y MIDP 2.0APIs de Teléfonos y MIDP 2.0¿Qué traen las APIs?¿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).

Page 36: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 36

ConclusionesConclusiones

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.

Page 37: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 37

PreguntasPreguntas y yRespuestas Respuestas

Page 38: Programación de Juegos Móviles con J2ME

Programación de Juegos Móviles con J2ME - EVA 2003 38

Contacto Contacto

Fernando [email protected]