Hallo,
ich soll eine animation programmieren, in der sich Bilder in verschiedene Richtungen bewegen. Dies ist mir nun auch gelungen. Nun habe ich das Problem, dass bei
repaint() nicht die update() Methode aufgerufen wird(obs benötigt wird ungewisse)
Schlimmer ist eher, dass jedes Bild einen schwarzen Balken durch das Applet zieht. Dies sollte möglichst nicht passieren.
Woran liegt das und wie kann ich dies korrigieren?
Hier mal der code
Danke
skizZ
ich soll eine animation programmieren, in der sich Bilder in verschiedene Richtungen bewegen. Dies ist mir nun auch gelungen. Nun habe ich das Problem, dass bei
repaint() nicht die update() Methode aufgerufen wird(obs benötigt wird ungewisse)
Schlimmer ist eher, dass jedes Bild einen schwarzen Balken durch das Applet zieht. Dies sollte möglichst nicht passieren.
Woran liegt das und wie kann ich dies korrigieren?
Hier mal der code
Java:
public class Animation extends JApplet implements Runnable{
Image pictures[] = new Image[4];
String files[] = { "new-1.gif", "new-2.gif", "new-3.gif",
"new-4.gif", };
Picture p1, p2;
Image m_ImgBuffer;
private List<Picture> picList =
Collections.synchronizedList(new ArrayList<Picture>());
private Graphics dbGraphics;
public void init() {
this.setSize(new Dimension(500, 500));
}
public void addPic(Picture picture)
{
picList.add(picture);
new Thread(this).start();
}
public void start() {
int i;
System.out.println("TEST");
MediaTracker tracker = new MediaTracker(this);
for (i=0; i < pictures.length; i++)
{
pictures[i] = getImage(getDocumentBase(), files[i]);
tracker.addImage(pictures[i], i); // i ist ein Identifikator dieses Bildes
System.out.println("TEST");
try
{
tracker.waitForID(i);
}
catch(InterruptedException e) {}
}
p1 = new Picture(pictures[0], 10, 10, 1, 1);
p2 = new Picture(pictures[1], 50, 50, 1, 0);
addPic(p1);
addPic(p2);
}
public void run() {
while(true) {
repaint();
try {
for (Picture picture : picList)
{
if(picture.x < this.getSize().width)
{
picture.x += picture.newx;
} else { picture.x = picture.stdx; }
if(picture.y < this.getSize().height)
{
picture.y += picture.newy;
} else { picture.y = picture.stdy; }
}
Thread.sleep(40);
repaint();
}
catch (InterruptedException e){}
}
}
public void paint(Graphics g) {
synchronized (pictures)
{
for (Picture picture : picList)
{
g.drawImage(picture.image, picture.x, picture.y, this);
}
}
}
class Picture
{
Image image;
int x, y, newx, newy, stdx, stdy;
public Picture(Image image, int x, int y, int newx, int newy)
{
this.image = image;
this.x = x;
this.y = y;
this.newx = newx;
this.newy = newy;
this.stdx = x;
this.stdy = y;
}
}
Danke
skizZ