-
Fish animation
So i drew a fish with awt an i made him move kinda and thats the problem the fish justs get thicker how do i make it erase the old line
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Color;
public class Template
{
public static void main (String args[])
{
Windows win = new Windows();
win.setSize(800,600);
win.addWindowListener(new WindowAdapter() {public void
windowClosing(WindowEvent e) {System.exit(0);}});
win.show();
}
}
class Windows extends Frame
{
public void paint(Graphics screen)
{
Polygon fish= new Polygon();
for(int x1=1;x1<=60;x1++)
{
fish.addPoint((130+x1 ),150);
fish.addPoint((125+x1),350);
fish.addPoint((175+x1),250);
screen.drawPolygon(fish);
screen.drawLine((175+x1),250,(250+x1),400);
screen.drawLine((250+x1),400,(375+x1),275);
screen.drawLine((375+x1),275,(260+x1),125);
screen.drawLine((175+x1),250,(260+x1),125);
screen.drawOval((290+x1),225,50,50);
screen.setColor(Color.green);
screen.fillOval((308+x1),242,20,20);
delay(5000);
}
}
public static void delay(double d)
{
double n;
for(n=0;(n<=d);n+=.0001);
}
/* public static move(int x1) Comment out Start
{
int move=x1+=1;
return move;
}
public static move2(int x2)
{
int move2=x2+=1;
return move2; END(Commment)
}*/
}
-
I have no idea why you are using AWT. These days everybody uses Swing. So I would start by reading the Custom Painting section from the Swing tutorial for the proper way to do this in Swing.
Also, check out the Swing Timer for a better way to do animation.
-
Heres how I did it:
Code:
import java.io.*;
import java.util.Random;
import java.text.DecimalFormat;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Color;
public class Template
{
public static void main (String args[])throws IOException
{
Windows win = new Windows();
win.setSize(800,600);
win.addWindowListener(
new WindowAdapter() {
public void
windowClosing(WindowEvent e) {
System.exit(0);}});
win.show();
}
}
class Windows extends Frame
{
public void paint(Graphics screen)
{
for(int x1=1;x1<=60;x1++)
{
Polygon fish= new Polygon();
fish.addPoint((125+x1),150);
fish.addPoint((125+x1),350);
fish.addPoint((175+x1),250);
screen.clearRect(0,0,800,600);
screen.drawPolygon(fish);
screen.drawLine((175+x1),250,(250+x1),400);
screen.drawLine((250+x1),400,(375+x1),275);
screen.drawLine((375+x1),275,(260+x1),125);
screen.drawLine((175+x1),250,(260+x1),125);
screen.drawOval((290+x1),225,50,50);
screen.setColor(Color.green);
screen.fillOval((308+x1),242,20,20);
delay(5000);
}
}
public static void delay(double d)
{
double n;
for(n=0;(n<=d);n+=.0001)
;
}
/* public static move(int x1) //comment out start
{
int move=x1+=1;
return move;
}
public static move2(int x2)
{
int move2=x2+=1;
return move2;
}*/ // comment out end
}
This way is very bad in my opinion because you aren't clearing the Graphics, you just keep adding to it.
-
IMO,
1. Clear the screen after each render
2. Don't loop to cause a delay create a timer thread and sleep it for the time needed to delay the rendering or use another lib that can give the appropriate functionality. (how do you stop the application ? by crashing it)