J2ME: Videojuegos con GameCanvas en un MIDLET
jueves, 22 de abril de 2010
15:22
Publicado por
Joseph Gonza Chavez
Etiquetas:
J2ME
En esta MIDLET estaremos usando la clase "GameCanvas" para desarrollar un pequeño videojuego para el movimiento de un personaje en nuestro celular.
Tipo: Midlet
capa.java_________________
package frames.manager;__________________________
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Capa extends MIDlet {
JuegoGameCanvas3 juego;
Display display;
public void startApp() {
display=Display.getDisplay(this);
juego=new JuegoGameCanvas3(true);
display.setCurrent(juego);
Thread t=new Thread(juego);
t.start(); //
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
Tipo: Clase Java
JuegoGameCanvas3.java_________________
package frames.manager;______________________________________
import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.lang.*;
public class JuegoGameCanvas3 extends GameCanvas implements Runnable{
//variables
int width;
int height;
int coordX=0;
int coordY=0;
int coordXSprite;
int coordYSprite;
final static int WIDTH_VW=180;
final static int HEIGHT_VW=177;
Image tiled=null;
Image sprited=null;
LayerManager lm;
TiledLayer tl;
Sprite sprite;
Graphics g;
//constructor
public JuegoGameCanvas3(boolean b){
super(b);
//Inicializacion de variables
width=getWidth();
height=getHeight();
g=getGraphics();
//Layer manager en el que colocar los distintos
//elementos visuales que componen la aplicacion
lm=new LayerManager();
//inicializacion de tiledlayer
try{
tiled=Image.createImage("/frames/manager/tiledLayer.png");
}catch(java.io.IOException e){
}
tl=new TiledLayer(20,11,tiled,16,16);
try{
sprited=Image.createImage("/frames/manager/imgSprite.png");
}
catch(java.io.IOException e){
}
int[]map={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,6,1,1,1,1,6,6,1,1,1,1,1,1,1,1,1,1,6,
1,5,3,4,1,1,5,3,3,4,1,1,1,1,1,1,1,1,5,3,
5,3,3,3,4,5,3,3,3,3,4,1,1,1,5,3,3,3,3,3,
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};
for(int i=0;i
int column=i%20;
int row=(i-column)/20;
tl.setCell(column, row, map[i]);
}
//hacemos visible el tiledLyer que dibuja el fondo
tl.setVisible(true);
//Sprite que representa la animacion
sprite=new Sprite(sprited,15,25);
int[]sequence={0,1,2,3};
coordXSprite=width/2;
coordYSprite=112;
sprite.setFrameSequence(sequence);
sprite.defineReferencePixel(0,25);
sprite.setRefPixelPosition(coordXSprite, coordYSprite);
sprite.setTransform(Sprite.TRANS_MIRROR);
sprite.setVisible(true);
//añadimos los distintos layers al LayerManager
lm.append(sprite);
lm.append(tl);
//Definimos la ventana visible y la dibujamos
lm.setViewWindow(0, 0,WIDTH_VW, HEIGHT_VW);
lm.paint(g, 0, 0);
flushGraphics();
}
public void run(){
while(true){
try{
//Actualizar el estado del juego
int keyState=this.getKeyStates();
if(keyState!=0){
this.actualizaPosicion(keyState);
lm.setViewWindow(coordX, coordY, WIDTH_VW, HEIGHT_VW);
sprite.setRefPixelPosition(coordXSprite,coordYSprite);
//Responder a la pulsacion de teclas,
//repintando aqui por ejemplo
lm.paint(g, 0, 0);
flushGraphics();
//Esperemos
Thread.sleep(50);
}
}catch(Exception e){
System.out.println(e);
}
}
}
//Actualiza la posicion del Sprite en funcion de la accion ejecutada
public void actualizaPosicion(int key){
switch(key){
case 4:
if(coordX > 3){
coordX -=4;
sprite.prevFrame();
coordXSprite-=4;
}
break;
case 32:
if(coordX
coordX +=4;
sprite.nextFrame();
coordXSprite+=4;
}
break;
case 2:
if(coordY
coordY -=4;
sprite.nextFrame();
coordYSprite-=4;
}
break;
case 64:
if(coordY
coordY +=4;
sprite.prevFrame();
coordYSprite+=4;
}
break;
}
}
}
Archivo Imagen que se usaron:
imgSprite.png
Muchas gracias por el codigo pero esta incompleto en unas partes
en un for:
for(int i=0;i //falta todo esto){
int row=(i-column)/20;
tl.setCell(column, row, map[i]);
}
y 3 if's
case 32:
if(coordX //falta todo esto){
coordX +=4;
sprite.nextFrame();
coordXSprite+=4;
}
break;
case 2:
if(coordY //falta todo esto){
coordY -=4;
sprite.nextFrame();
coordYSprite-=4;
}
break;
case 64:
if(coordY //falta todo esto){
coordY +=4;
sprite.prevFrame();
coordYSprite+=4;
}
de ante mano amigo y gran codigo es de mucha ayuda
http://newgame9.com/final-fantasy-xiv-playstation-3/
Lo que falta del código no es mucho, estoy comenzando con esto de los juegos para moviles y creo que nada mejor que java para empezar...
Nunca habia usado antes ni un sprite ni tiles, la verdad muchas muchas gracias!!!