Semana 12 j2_me_api_bn_animacion

330 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
330
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Semana 12 j2_me_api_bn_animacion

  1. 1. PROGRAMACIÓN DE JUEGOS EN J2ME PARA CELULARES
  2. 2. Programación en J2ME • Canvas permite interpretar el input del usuario – void keyPressed(int keycode) – void keyReleased(int keycode) – void keyRepeated(int keycode) – int getGameAction(int keycode) • Posee constantes para comparar – KEY_NUM0 – KEY_NUM9 – KEY_STAR – KEY_POUND – LEFT, RIGHT, UP, DOWN, FIRE – GAME_A, GAME_B, GAME_C, GAME_D
  3. 3. Programación en J2ME (cont.) • La clase que extienda Canvas tiene que implementar el método abstracto Paint(Graphics g) • En esa función definimos lo que queremos pintar • Cada vez que queremos que se refresque la pantalla, llamamos al método repaint()
  4. 4. Programación en J2ME (cont.) • Graphics – drawImage – drawString – drawRect – drawRoundRect – drawLine – drawArc – fillRect – fillRoundRect – fillArc  setColor  setStrokeStyle  …
  5. 5. Programación en J2ME (cont.) • Game Loop – Leer Input del usuario – Simular el mundo (IA, colisiones, etc.) – Dibujar el resultado – Esperar para completar el tiempo del frame • Hasta ahora, todo lo visto se puede implementar en MIDP1.0
  6. 6. Programación en J2ME (cont.) • Game API – javax.microedition.lcdui.game.* • GameCanvas • Layer • LayerManager • Sprite • TiledLayer – Sólo disponible desde MIDP2.0
  7. 7. Programación en J2ME (cont.) • GameCanvas – Extiende a Canvas – Agrega un buffer fuera de pantalla – Permite hacer polling a las teclas – El método getGraphics() retorna el buffer – Al finalizar de pintar el frame fuera de la pantalla, se llama a flushGraphics() – setFullScreenMode(Boolean)
  8. 8. Programación en J2ME (cont.) • GameCanvas – int getKeyStates() • UP_PRESSED • DOWN_PRESSED • LEFT_PRESSED • RIGHT_PRESSED • FIRE_PRESSED – Cómo usarlo? • keyStates=getKeyStates(); • If(keyStates & LEFT_PRESSED != 0) – Usuario presionó izquierda…
  9. 9. Programación en J2ME (cont.) • 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()
  10. 10. Programación en J2ME (cont.) • Sprite – Extiende Layer agregando animación, detección de colisión, 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)
  11. 11. Programación en J2ME (cont.) • Animación del Sprite – void setFrameSequence(int[] sequence) • Establece una secuencia a partir de los frames de la imagen original del sprite – int getFrameSequenceLength() • Retorna el número de frames que tiene la secuencia actual – int getRawFramesCount() • Retorna el número de frames que tiene la imagen original del sprite
  12. 12. Programación en J2ME (cont.) • Animación del Sprite – void setFrame(int sequenceIndex) • Selecciona un frame en particular de la secuencia para el próximo 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 número 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
  13. 13. Programación en J2ME (cont.) • Transformaciones del Sprite – defineReferencePixel(getWidth()/2, getHeight()/2) – setTransform(transformación) • TRANS_NONE • TRANS_ROT90 • TRANS_ROT180 • TRANS_ROT270 • TRANS_MIRROR • TRANS_MIRROR_ROT90 • TRANS_MIRROR_ROT180 • TRANS_MIRROR_ROT270
  14. 14. Programación en J2ME (cont.) • TiledLayer – TiledLayer(int columns, int rows, Image image, int tileWidth, int tileHeight) • Especifica las columnas y filas del fondo, imagen donde estás 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 rectángulo
  15. 15. Programación en J2ME (cont.) • 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)
  16. 16. Programación en J2ME (cont.) • Esperar para completar el tiempo del frame – 15 FPS o menos – Aprox. 70 milisegundos por frame elapsed=startTime; startTime=System.currentTimeMillis(); elapsed=startTime-elapsed; If(elapsed < MILLISECS_PER_FRAME) { thread.sleep(MILLISECS_PER_FRAME-elapsed); } Else { thread.yield(); }

×