vendredi 8 mai 2015

shooting a bullet from tank java

I'm writing a tank game . I want to have a method called shoot that when I press Space the tank have to shoot . my problem is that when the program calls this method it goes through the while loop and after that it prints the end location of the ball . I need to implement something in the while loop that every time it calculates dx and dy it goes to the paint method and paint the new location of the ball. I tried adding paintImmediately() but it throws stackoverflow error. thanks for helping me.

actually I'm changing dx and dy and I want the paint method to draw the ball at that place...

   public void shoot(Image img, double fromx, double fromy, double ydestination, int speed) {
    int time = 0;
    double speedy, speedx;
    while (dy!=ydestination) {
        time++;
        speedy = speed * Math.sin(Math.toRadians(angle));
        speedx = speed * Math.cos(Math.toRadians(angle));

        dy = (int) ((-5) * time * time + speedy * time + fromy);
        dx = (int) (speedx * time + fromx);
        // paintImmediately((int)dx,(int) dy, 10, 10);

        try {
            Thread.sleep(100);

        } catch (InterruptedException ie) {
            ie.printStackTrace();
        }
    }

}

and here is my overrided paint method the last line is for the bullet that is my question :

@Override
public void paint(Graphics g) {

    System.out.println("paint");
    super.paint(g);

    render(bufferedGraphics);

    g.drawImage(bufferedScreen, 0, 0, null);
    // System.out.println(x1);
    BufferedImage buff = rotateImage(mile1, angle);
    BufferedImage buf = rotateImage(mile2, angle);
    g.drawImage(buff, mx1 - 40, my1, null);
    g.drawImage(buf, mx2 , my2, null);
    g.drawImage(bullet, (int) dx, (int) dy, null);
    //setVisible(true);
}

Aucun commentaire:

Enregistrer un commentaire