Documente Academic
Documente Profesional
Documente Cultură
Introduccin : Recursos
Recursos limitados
Diferentes configuraciones Necesidad de adaptarse a las diferentes configuraciones Optimizar todo lo posible en pro de la jugabilidad.
Introduccin : APIs
Java
J2SE: Standard Edition J2EE: Enterprise Edition J2ME: Micro Edition Mquina virtual, interfaz de programacin bsica Connected Limited Device Configuration (CLDC)
Configuraciones
Introduccin (cont.)
Perfiles
Interfaz de ms alto nivel Mobile Information Device Profile(MIDP) 1.0 Mobile Information Device Profile(MIDP) 2.0 Prximamente MIDP 3.0 Interfaz propia del celular (ej: Nokia UI)
Introduccin (cont.)
MIDP1.0
No tiene soporte para audio No hay pintado de pantalla completa No soporta transparencias Conectividad slo va HTTP Todos los celulares actuales soportan MIDP1.0 Soporte multimedia Soporte para pintado a pantalla completa Soporte para transparencias Conectividad ampliada (HTTP, sockets, etc) Mejoras especficas para desarrollo de juegos Varios soportan MIDP2.0 hoy en da. (2007)
MIDP2.0
Programacin en J2ME
javax.microedition.MIDlet
startApp()
Cuando parte la aplicacin o cuando vuelve de pausa Sucede cuando llaman al celular o un SMS, etc. Cuando se sale de la aplicacin.
pauseApp()
destroyApp()
Activo El MIDlet est siendo ejecutado y tiene control sobre los recursos del sistema Destruido El MIDlet fue destruido. Todos sus recursos han sido liberados. Pausado El MIDlet est corriendo en el fondo. No puede responder a ningn evento de la interfaz de usuario, pero puede ser devuelto a Activo por el AMS
Game Loop
Leer Input del usuario ( Canvas.keyPressed(), CommandListeners ) Simular el mundo (IA, colisiones, etc.) Dentro del loop cuando el juego se esta corriendo. Dibujar el resultado Al final o entremedio cuando se quiere obligar a que ciertas cosas se dibujen antes que otras. ( No abusar ) Esperar para completar el tiempo del frame
Demo
Instalacin
NetBeans 5.0 + J2SE v1.4.2. http://java.sun.com/j2se/1.4.2/download-netbeans50.html NetBeans Mobility Pack (incluye Wireless Toolkit 2.2). http://www.netbeans.org/products/mobility/
Extra: Tabla comparativa de celulares con sus configuraciones, perfiles, y otros datos. http://developers.sun.com/techtopics/mobility/device/ device
Anexo
Programacin en J2ME
javax.microedition.lcdui.Display
Display representa a la pantalla LCD del celular Obtiene el Display asociado al MIDlet Setea el objeto que se quiere desplegar en la pantalla LCD
Display.getDisplay(MIDlet m)
Display.setCurrent(Displayable d)
javax.microedition.lcdui.Displayable
Displayable
Displayable representa un objeto que puede ser desplegado en la pantalla LCD Screen
Form
Canvas
Especifica quin interpretar los comandos recibidos por el objeto Displayable El intrprete debe implementar el mtodo abstracto CommandListener Agrega un comando a la pantalla
Displayable.addCommand(Command c)
Displayable.removeCommand(Command c)
void keyPressed(int keycode) void keyReleased(int keycode) void keyRepeated(int keycode) int getGameAction(int keycode)
KEY_NUM0 KEY_NUM9 KEY_STAR KEY_POUND LEFT, RIGHT, UP, DOWN, FIRE GAME_A, GAME_B, GAME_C, GAME_D
La clase que extienda Canvas tiene que implementar el mtodo abstracto Paint(Graphics g) En esa funcin definimos lo que queremos pintar Cada vez que queremos que se refresque la pantalla, llamamos al mtodo repaint()
Graphics
setColor setStrokeStyle
Game Loop
Leer Input del usuario Simular el mundo (IA, colisiones, etc.) Dibujar el resultado Esperar para completar el tiempo del frame
Game API
javax.microedition.lcdui.game.*
GameCanvas Layer LayerManager Sprite TiledLayer
GameCanvas
Extiende a Canvas Agrega un buffer fuera de pantalla Permite hacer polling a las teclas El mtodo getGraphics() retorna el buffer Al finalizar de pintar el frame fuera de la pantalla, se llama a flushGraphics() setFullScreenMode(Boolean)
GameCanvas
int getKeyStates() UP_PRESSED DOWN_PRESSED LEFT_PRESSED RIGHT_PRESSED FIRE_PRESSED Cmo usarlo? keyStates=getKeyStates(); If(keyStates & LEFT_PRESSED != 0)
Layer
Base para Sprite y TiledLayer void setPosition(int x, int y) void setVisible(int x, int y) boolean isVisible() void move(int dx, int dy) int getHeight() int getWidth() int getX() int getY()
Sprite
Extiende Layer agregando animacin, deteccin de colisin, transformaciones de imagen Sprite(Image imagen) Sprite(Image imagen, int frameWidth, int frame Height) Sprite(Sprite s) collidesWith(Image imagen, int x, int y, bool pixelLevel) collidesWith(Sprite s, bool pixelLevel) collidesWith(TiledLayer t, bool pixelLevel) defineCollisionRectangle(int x, int y, int width, int height)
Establece una secuencia a partir de los frames de la imagen original del sprite
int getFrameSequenceLength()
int getRawFramesCount()
void setFrame(int sequenceIndex) Selecciona un frame en particular de la secuencia para el prximo paint del sprite void nextFrame() Selecciona el siguiente frame en la secuencia void prevFrame() Selecciona el frame anterior en la secuencia int getFrame() Retorna el nmero de frame dentro de la secuencia que est selecconado actualmente void paint(Graphics g) Pinta el Sprite. El pixel de referencia es el de arriba a la izquierda
defineReferencePixel(getWidth()/2, getHeight()/2) setTransform(transformacin) TRANS_NONE TRANS_ROT90 TRANS_ROT180 TRANS_ROT270 TRANS_MIRROR TRANS_MIRROR_ROT90 TRANS_MIRROR_ROT180 TRANS_MIRROR_ROT270
TiledLayer
TiledLayer(int columns, int rows, Image image, int tileWidth, int tileHeight) Especifica las columnas y filas del fondo, imagen donde ests los tiles y sus dimensiones Void setCell(int col, int row, int tileIndex) Pinta en (col, row) con el tile tileIndex (parte de 1, el 0 es transparente) Void fillCells(int col, int row, int numCols, int numRows, int tileIndex) setCell pero en un rectngulo
LayerManager
Sirve para pintar grupos de Layers Void append(Layer l) Void insert(Layer l, int index) Int getSize() Void remove(Layer l) Void setViewWindow(int x, int y, int width, int height) Void paint(Graphics g, int x, int y) Layer getLayerAt(int index)