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
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
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.
- roger1345's blog
- Inicie sesión o regístrese para enviar comentarios



Comentarios
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