Mi problema es el siguiente:
Tengo una aplicación en Wireless Toolkit 2.5.1 en el cual tengo una bola manual(de color verde, la cual manipulo con las flechas del teclado) y un player (bola automática de color celeste, la cual se mueve de izquierda a derecha y viceversa) y quisiera que me ayuden en la programación de tal manera que la bola manual al mínimo roce con el player se produzca un efecto de eclipse(que se pinte de color negro el fondo de pantalla), sólo en el instante del choque.
PD: En el siguiente archivo, lo que NO QUIERO es que me salga el efecto de eclipse cuando la bola manual se encuentre a cierta inclinación con respecto a la bola automática.
Espero me hayan entendido. Gracias de antemano por su ayuda.
POR FAVOR LA LINEA 196, EN ESA NECESITO LA MODIFICACION
Progreso normal
[URL=http://img254.imageshack.us/i/juego2b.jpg/][IMG]http://img254.imageshack.us/img254/755/juego2b.th.jpg[/IMG][/URL]
Roce normal
[URL=http://img717.imageshack.us/i/juego2a.jpg/][IMG]http://img717.imageshack.us/img717/7641/juego2a.th.jpg[/IMG][/URL]
He aquí mi problema
[URL=http://img401.imageshack.us/i/juego2p.jpg/][IMG]http://img401.imageshack.us/img401/5083/juego2p.th.jpg[/IMG][/URL]
Por favor miren la imagen y hay verán lo que no quiero
Código Java:
Ver original
/*importamos las clases de java que utilizaremos en nuestro programa*/ import javax.microedition.midlet.*; import javax.microedition.lcdui.*; /*aqui nuestro MIDlet, esta clase sera la primera en ser ejecutada cuando se ejecute el programa*/ public class Juego2 extends MIDlet { //metodo cuando el midlet arranca public void startApp() { //creamos un objeto SSCanvas (nuestra pantalla de juego) SSCanvas screen=new SSCanvas(); //indicamos al dispositivo que screen (instancia de SSCanvas) será la nueva pantalla activa Display.getDisplay(this).setCurrent(screen); } //metodo cuando el midlet entra en pausa public void pauseApp() { } //metodo cuando el midlet es destruido public void destroyApp(boolean unconditional) { } } //esta clase es la encargada de hacer funcionar nuestra aplicación gráfica private Sprite ball; private Sprite player; //metodo constructor public SSCanvas(){ //instanciamos (creamos) el objeto ball a partir de la clase Sprite ball = new Sprite(getWidth()/2,getHeight()/2,20,20); player = new Sprite(getWidth()/2,getHeight()/2,20,20); } public void run(){ while(true){ //actualizamos la posicion de la bola ball.computeBallX(getWidth(),getHeight()); player.computePlayerX(getWidth(),getHeight()); player.computePlayerY(getWidth(),getHeight()); //forzamos el repintado de la pantalla repaint(); serviceRepaints(); try { } } } //metodo de la clase canvas para pintar en pantalla //seleccionamos el color negro para pintar el fondo if(player.collision(ball) )g.setColor(0,0,0); else g.setColor(255,255,255); //pintamos el fondo de pantalla con un rectangulo con el tamaño de //la pantalla getWidth() y getHeight() es un método de la clase canvas //que nos devuelve el ancho y alto de la pantalla g.fillRect(0,0,getWidth(),getHeight()); //pintamos la bola en pantalla ball.draw(g); player.draw1(g); } /*sobrecarga de método para detectar cuando una tecla es soltada por el usuario*/ public void keyReleased(int keyCode) { int action=getGameAction(keyCode); switch (action) { case LEFT: player.keyUp(player.LEFT); break; case RIGHT: player.keyUp(player.RIGHT); break; case UP: player.keyUp(player.UP); break; case DOWN: player.keyUp(player.DOWN); break; case FIRE: break; } } //sobrecarga del método que detecta cuando una tecla es pulsada por el usuario public void keyPressed(int keyCode) { int action=getGameAction(keyCode); switch (action) { case LEFT: player.keyPress(player.LEFT); break; case RIGHT: player.keyPress(player.RIGHT); break; case UP: player.keyPress(player.UP); break; case DOWN: player.keyPress(player.DOWN); break; case FIRE: break; } } } class Sprite{ //atributos privados protected int x; protected int y; protected int width; protected int height; protected int incX,incY; private boolean startX=false; //movimiento inicial en x=apagado private boolean startY=false; //movimiento inicial en y=apagado //declaracion de constantes protected static final int LEFT = 1; protected static final int RIGHT = 2; protected static final int UP = 3; protected static final int DOWN = 4; protected static final int FIRE = 5; //metodo constructor public Sprite(int x,int y,int width,int height){ this.x=x; this.y=y; this.width=width; this.height=height; incX=1; incY=1; } //metodo que actualiza la posición del sprite public void computeBallX(int screenW, int screenH){ if(x <= 0)incX=1; else if(x+width >= screenW)incX=-1; x+=incX; } public void computeBallY(int screenW, int screenH){ if(y <= 0)incY=1; else if(y+width >= screenH)incY=-1; y+=incY; } //metodo que actualiza la posicion del sprite que controlamos por teclado public void computePlayerX(int screenW, int screenH) { if(x + incX > 0 && (x + incX) < (screenW - width)){ x+=incX; if(startX==false)incX=0; } } public void computePlayerY(int screenW, int screenH) { if(y + incY > 0 && (y + incY) < (screenH - height)){ y+=incY; if(startY==false)incY=0; } } //metodo para detectar colisiones public boolean collision(Sprite sp){ //comprobamos si el sprite 1 ha colisionado o //superpuesto sobre el sprite 2 int mayor=x,menor=x; int mayor2=y,menor2=y; if(sp.x>mayor)mayor=sp.x; if(sp.x<menor)menor=sp.x; if(sp.y>mayor2)mayor2=sp.y; if(sp.y<menor2)menor2=sp.y; if (((mayor-menor)<(width/2+sp.width/2))&&((mayor2-menor2)<(height/2+sp.height/2)))return true; // ^ // | // | EN ESTA CONDICION SE LE REALIZA ALGUNOS CAMBIOS PARA PODER LOGRAR LO QUE PIDO! else return false; } //metodo que actualiza la posicion del sprite //metodo para detener el desplazamiento del sprite public void keyUp(int keyCode) { switch (keyCode) { case LEFT: startX=false; break; case RIGHT: startX=false; break; case UP: startY=false; break; case DOWN: startY=false; break; } } //método para indicar la dirección del desplazamiento public void keyPress(int keyCode) { switch (keyCode) { case LEFT: incX=-1; startX=false; break; case RIGHT: incX=1; startX=false; break; case UP: incY=-1; startY=false; break; case DOWN: incY=1; startY=false; break; case FIRE: break; } } //metodo que muestra en pantalla al sprite g.setColor(x,255,255); g.fillArc(x,y, width, height,0, 360); } g.setColor(0,250,0); g.fillArc(x,y,y/8, y/8,0, 360); } }