Iniciando con los Juegos en J2ME

Uso de Sprite

Comenzaremos en el mundo de los juegos, de los mas sencillos a los mas complejos, y esta es una de las clases mas importantes, y que combinada con otras clases nos darán mas control y funciones sobre nuestros juegos.

Un Sprite es una Imagen con secuencias de fotogramas o imágenes en donde un personaje aparece en varias posiciones o realizando una acción paso a paso, y esto nos ayuda a realizar la animación en nuestros dispositivos. En vez de cargar cada imagen por separado se carga una sola y la clase Sprite facilita los métodos para movernos de fotograma en fotograma.

Imagenes

Codigo

Clase Principal

package clases;

import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Principal extends MIDlet {

 Display display;
 Pantalla pantalla;

 public Principal() {
  display=Display.getDisplay(this);
  pantalla=new Pantalla(this);
 }

 protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
 }

 protected void pauseApp() {
 }

 protected void startApp() throws MIDletStateChangeException {
  display.setCurrent(pantalla);
 }
}

Clase Pantalla

package clases;

import java.io.IOException;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class Pantalla extends GameCanvas  implements Runnable{

 Principal midlet;
 Image wolv,wolvinv;
 Sprite wolvering,wolveringinv;
 LayerManager lm = new LayerManager();
 Thread t;
 int x, y;
 boolean swcaminaadelante=false;
 boolean swsalta=false;
 boolean swcaminaatras=false;
 boolean swabajo=false;
 boolean swmiraratras=false;
 boolean swfire=false;

 public Pantalla(Principal pr){
  super(false);
  this.midlet=pr;
  x=getWidth()/2;
  y=getHeight()-40;
  cargaLobo();
  t= new Thread(this);
  t.start();
 }

 public void cargaLobo(){
  try{
   wolv=Image.createImage("/wolf.png");
   wolvering= new Sprite (wolv,90,90);
   wolvering.defineReferencePixel(45,45);
   int sec1[] = new int[] {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
   int sec2[] = new int[] {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};
   wolvering.setFrameSequence(sec1);
   wolvinv=Image.createImage("/wolfinv.png");
   wolveringinv= new Sprite (wolvinv,90,90);
   wolveringinv.defineReferencePixel(45,45);
   wolveringinv.setFrameSequence(sec2);
   lm.insert(wolvering,0);
   lm.insert(wolveringinv, 1);
  }
  catch (Exception e){
   e.printStackTrace();
  }
 }

 public void run() {  
  Graphics g = getGraphics();
  g.setColor(255,255,255);
  wolvering.setRefPixelPosition(x,y);
  wolvering.paint(g);
  flushGraphics();
  while(true){
   if(swcaminaadelante){
    for(int i=0;i<4;i++){
     wolvering.setFrame(i+2);
     x+=5;
     wolvering.setRefPixelPosition(x,y);
     wolvering.paint(g);
     flushGraphics();
     try{
      t.sleep(100);
     }catch (Exception e){
      e.printStackTrace();
     }
     g.fillRect(0,0,getWidth(),getHeight());
    }
    swcaminaadelante=false;
    swmiraratras=false;
   }
   if(swcaminaatras){
    for(int i=0;i<4;i++){
     wolveringinv.setFrame(i);
     x-=5;
     wolveringinv.setRefPixelPosition(x,y);
     wolveringinv.paint(g);
     flushGraphics();
     try{
      t.sleep(100);
     }catch (Exception e){
      e.printStackTrace();
     }
     g.fillRect(0,0,getWidth(),getHeight());
    }
    swcaminaatras=false;
    swmiraratras=true;
   }
   if(swsalta){
    if(swmiraratras==false){
     g.fillRect(0,0,getWidth(),getHeight());
     wolvering.setFrame(9);
     x+=5;
     y-=14;
     wolvering.setRefPixelPosition(x,y);
     wolvering.paint(g);
     flushGraphics();
     try{
      t.sleep(100);
     }catch (Exception e){
      e.printStackTrace();
     }
     y+=14;
     g.fillRect(0,0,getWidth(),getHeight());
     for(int i=0;i<6;i++){
      wolvering.setFrame(i+12);
      x+=5;
      if(i<3){
       y-=14;
      }else{
       y+=14;
      }
      wolvering.setRefPixelPosition(x,y);
      wolvering.paint(g);
      flushGraphics();
      try{
       t.sleep(100);
      }catch (Exception e){
       e.printStackTrace();
      }
      g.fillRect(0,0,getWidth(),getHeight());
     }
     wolvering.setRefPixelPosition(x,y);
     wolvering.setFrame(0);
     wolvering.paint(g);
     flushGraphics();
     swsalta=false;
     swmiraratras=false;
    }else{
     g.fillRect(0,0,getWidth(),getHeight());
     wolveringinv.setFrame(9);
     x-=5;
     y-=14;
     wolveringinv.setRefPixelPosition(x,y);
     wolveringinv.paint(g);
     flushGraphics();
     try{
      t.sleep(100);
     }catch (Exception e){
      e.printStackTrace();
     }
     y+=14;
     g.fillRect(0,0,getWidth(),getHeight());
     for(int i=0;i<6;i++){
      wolveringinv.setFrame(i+12);
      x-=5;
      if(i<3){
       y-=14;
      }else{
       y+=14;
      }
      wolveringinv.setRefPixelPosition(x,y);
      wolveringinv.paint(g);
      flushGraphics();
      try{
       t.sleep(100);
      }catch (Exception e){
       e.printStackTrace();
      }
      g.fillRect(0,0,getWidth(),getHeight());
     }
     wolveringinv.setRefPixelPosition(x,y);
     wolveringinv.setFrame(0);
     wolveringinv.paint(g);
     flushGraphics();
     swsalta=false;
    }
   }
   if(swabajo){
    if(swmiraratras==false){
     y+=3;
     wolvering.setRefPixelPosition(x,y);
     wolvering.setFrame(9);
     wolvering.paint(g);
     flushGraphics();
     try{
      t.sleep(300);
     }catch (Exception e){
      e.printStackTrace();
     }
     wolvering.setRefPixelPosition(x,y);
     wolvering.setFrame(0);
     wolvering.paint(g);
     flushGraphics();
     swabajo=false;
     y-=3;
    }else{
     y+=3;
     wolveringinv.setRefPixelPosition(x,y);
     wolveringinv.setFrame(8);
     wolveringinv.paint(g);
     flushGraphics();
     try{
      t.sleep(300);
     }catch (Exception e){
      e.printStackTrace();
     }
     wolveringinv.setRefPixelPosition(x,y);
     wolveringinv.setFrame(0);
     wolveringinv.paint(g);
     flushGraphics();
     swabajo=false;
     y-=3;
    }
   }
   if(swfire){
    if(swmiraratras==false){
     for(int i=9;i<12;i++){
      wolvering.setFrame(i);
      wolvering.setRefPixelPosition(x,y);
      wolvering.paint(g);
      flushGraphics();
      try{
       t.sleep(100);
      }catch (Exception e){
       e.printStackTrace();
      }
      g.fillRect(0,0,getWidth(),getHeight());
     }
     wolvering.setRefPixelPosition(x,y);
     wolvering.setFrame(0);
     wolvering.paint(g);
     flushGraphics();
     swfire=false;
    }else{
     for(int i=9;i>5;i--){
      wolveringinv.setFrame(i);
      wolveringinv.setRefPixelPosition(x,y);
      wolveringinv.paint(g);
      flushGraphics();
      try{
       t.sleep(100);
      }catch (Exception e){
       e.printStackTrace();
      }
      g.fillRect(0,0,getWidth(),getHeight());
     }
     wolveringinv.setRefPixelPosition(x,y);
     wolveringinv.setFrame(0);
     wolveringinv.paint(g);
     flushGraphics();
     swfire=false;
    }
   }
  }
 }

 protected void keyPressed(int keyCode) {
  switch(getGameAction(keyCode)){
  case Canvas.UP:
   swsalta=true;
   break;
  case Canvas.DOWN:
   swabajo=true;
   break;
  case Canvas.LEFT:
   swcaminaatras=true;
   break;
  case Canvas.RIGHT:
   swcaminaadelante=true;
   break;
  case Canvas.FIRE:
   swfire=true;
   break;
  }
  repaint();
 }
}

Descargar

Podrán descargar el proyecto directamente desde aquí o pueden visitar Java Zone para mas información.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sr. Negativo

Excelente ejemplo J2ME

Como siempre tus post son muy buenos, y lo mejor que compartes tus conocimientos. He visto y probado varias de tus aplicaciones y me parecen muy buenas.

Gracias por compartir.

Desarrollo de aplicaciones

Buenas tarde, tengo un proyecto en que voy a desarrollar juegos para J2ME, pero la verdad no tengo experiencia, me gustaría contactarte para ver si puedes ayudarnos ya sea siendo parte del equipo o solo asesorarnos, mi correo es audaz17@gmail.com

Saludos