Hola!
Estoy "aprendiendo" a programar en Java y nos dejaron un trabajo de hacer que un personaje con sprite dispare, todo iba bien hasta que no se cual es el problema con la bala vertical. Si llega a lanzar, lanza solo una vez.. Si lanzo primero la horizontal, jamás vuelve a lanzar la vertical. No se cual sea el error, la verdad. Supongo que en la clase principal. ¿Me podrían ayudar porfa'? Aquí les dejo mi código...
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
public class Clase1 extends Canvas implements KeyListener {
private Frame ventana;
private Sprite sprite;
private PersonajeJugable otroSprite;
private Sprite fondo;
private Sprite disparoVer;
private Sprite disparoHor;
long tiempo=System.currentTimeMillis();
public Clase1()
{
sprite=new Sprite();
otroSprite=new PersonajeJugable();
ventana=new Frame();
fondo=new Sprite();
disparoHor=new Sprite();
disparoVer=new Sprite();
ventana.setSize(1100,778);
ventana.add(this);
ventana.setVisible(true);
ventana.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } });
disparoHor.setVisible(false);
disparoVer.setVisible(false);
fondo.setSprite("/imagenes/fondo.jpg");
sprite.setSprite("/imagenes/enemigo1.png");
sprite.setY(70);//POSICION
otroSprite.setSprite("/imagenes/Personajecool.png");
otroSprite.setcY(-otroSprite.getHeight()/2);
otroSprite.setcX(-otroSprite.getWidth()/2);
otroSprite.setY(this.getHeight()/2);
otroSprite.setX(this.getWidth()/2);
disparoHor.setSprite("/imagenes/bala.png");
disparoHor.setY(otroSprite.getY());
disparoHor.setX(otroSprite.getX());
disparoVer.setSprite("/imagenes/bala.png");
disparoVer.setY(otroSprite.getY());
disparoVer.setX(otroSprite.getX());
//otroSprite.setRotation(3f);
this.requestFocus();
this.addKeyListener(otroSprite);
while(true) // BUCLE INFINITO DEL JUEGO
{
if (System.currentTimeMillis()-tiempo>25)
{ // actualizamos cada 25 milisegundos
otroSprite.actualiza();
if (sprite.getX()>this.getWidth()) sprite.setX(0);
else sprite.setX(sprite.getX()+1);
//otroSprite.setRotation( otroSprite.getRotation()+5.05f);
dibuja(this.getGraphics());
tiempo=System.currentTimeMillis();
if (isCollision(sprite, otroSprite))//COMPARA SI EL PERSONAJE CHOCA CON EL ENEMIGO
{
sprite.setVisible(false);//SI ES ASI DESAPARECE EL MALO
}
//balas
if(disparoHor.getX()>this.getWidth())
{
disparoHor.setVisible(false);
}
else
{
disparoHor.setX(disparoHor.getX()+8);
}
if(disparoVer.getY()>this.getWidth())
{
disparoVer.setVisible(false);
}
else
{
disparoVer.setY(disparoVer.getY()-8);
}
if(otroSprite.disparoH == true && disparoHor.isVisble()==false)
{
disparoHor.setVisible(true);
disparoHor.setX(otroSprite.getX());
disparoHor.setY(otroSprite.getY());
otroSprite.disparoH = false;
}
else
{
otroSprite.disparoH = false;
}
if(otroSprite.disparoV == true && disparoVer.isVisble()==false)
{
disparoVer.setVisible(true);
disparoVer.setX(otroSprite.getX());
disparoVer.setY(otroSprite.getY());
otroSprite.disparoV = false;
}
else
{
otroSprite.disparoV = false;
}
//collision bala enemigo
if (isCollisionD(sprite, disparoHor))
{
sprite.setVisible(false);
disparoHor.setVisible(false);
}
if (isCollisionD(sprite, disparoVer))
{
sprite.setVisible(false);
disparoVer.setVisible(false);
}
}
}
}
public void dibuja(Graphics grafico)
{
// El Begin de OpenGL o DirectX
BufferedImage pantalla=new BufferedImage(this.getWidth(),this.getHeight(), BufferedImage.TYPE_INT_RGB );//CARGA TODAS LAS IMAGENES
fondo.putSprite(pantalla.getGraphics(), fondo.getX(), fondo.getY());
sprite.putSprite(pantalla.getGraphics(), sprite.getX(), sprite.getY());
otroSprite.putSprite(pantalla.getGraphics(), otroSprite.getX(), otroSprite.getY());
//balas
disparoHor.putSprite(pantalla.getGraphics(), disparoHor.getX(), disparoHor.getY());
disparoVer.putSprite(pantalla.getGraphics(), disparoVer.getX(), disparoVer.getY());
// ENd
grafico.drawImage(pantalla, 0, 0, this);//SOLO ES PARA IMPRIMIR
}
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void keyPressed(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void keyReleased(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public boolean isCollision(Sprite spriteUno,PersonajeJugable spriteDos)
{
if (((spriteUno.getX()+spriteUno.getWidth()>spriteDos .getX()) && (spriteDos.getX()+spriteDos.getWidth()>spriteUno.g etX()))
&& ((spriteUno.getY()+spriteUno.getHeight()>spriteDos .getY()) && (spriteDos.getY()+spriteDos.getHeight()>spriteUno. getY())))
return true;
else return false;
}
//Collision enemigo bala
public boolean isCollisionD(Sprite spriteUno,Sprite spriteDos)
{
if (((spriteUno.getX()+spriteUno.getWidth()>spriteDos .getX()) && (spriteDos.getX()+spriteDos.getWidth()>spriteUno.g etX()))
&& ((spriteUno.getY()+spriteUno.getHeight()>spriteDos .getY()) && (spriteDos.getY()+spriteDos.getHeight()>spriteUno. getY())))
return true;
else return false;
}
}
Muchísimas gracias :3