Hallo
Ich habe beim Neuaufsetzen des PCs vergessen den Arbeitsbereich zu speichern, weswegen all meine Projekte weg sind. Ich hab mir versucht ein paar Klassen wieder zusammenzubasteln, aber ich hab einiges vergessen und stecke bei den Animationen fest. Ich möchte lediglich in einem JFrame ein Hintergrundbild haben und 2 Akteure die sich gleichzeitig in 2 verschiedene Richtungen bewegen(Bild ändert sich nicht). Ich hab die letzten Tagen rumgetestet, aber ich schaffs nicht mehr...
Ich habe ein JImagePanel, in dem jeweils 1 Bild gespeichert und gezeichnet werden sollte. Der Source sieht so aus:
Okay. Ich hab nun mehrere Versuche gestartet, aber keiner hat funktioniert.
Ich hab mir gedacht das jedes Bild sein eigenes JPanel hat und ich dann einfach zuerst das Hintergrundbild anzeige und darüber die Akteure. Diese bewege ich dann mit setLocation.
Mein Versuch:
Ich habe den Verdacht, dass das letzte JPanel die anderen rauskickt. Ich möchte jedoch das die letzten JPanels einfach über das schon vorhande drübergezeichnet werden.
Ich hab auch versucht den Konstruktor anzupassen, aber die Akteure werden falsch angezeigt:
anstatt
Was mache ich falsch?
Edit: Füge ich die 2 Panels der Akteure (pan2,pan3) ins pan1 ein dann zeigt es mir, wenn ich die Methode run() starte, die gewünschte Animation an. Allerdings werden die Akteure nicht richtig angezeigt, das Bild flackert wild rum und naja.
Edit2: Ist diese Art von Implementierung/Vorgehensweise überhaupt üblich?
Edit3: Das Update hat das Flackern verursacht. Ich müsste nur noch hinkriegen die Akteure richtig anzuzeigen.
Edit4: Setze ich im Konstruktor nach dem setVisible(true) noch die Location von pan2 und pan3 bleiben die an der gleichen Stelle. In der run-Methode funktioniert dies aber. Ich versuche sie folgendermassen festzulegen:
Und das Icon wird immer noch nicht richtig angezeigt. Eigentlich sollten die beiden Vierecke rechts oben das Fett-Icon von Windows darstellen. Hier mal ein Bild:
http://img543.imageshack.us/img543/9081/anifehler.png
Ich habe beim Neuaufsetzen des PCs vergessen den Arbeitsbereich zu speichern, weswegen all meine Projekte weg sind. Ich hab mir versucht ein paar Klassen wieder zusammenzubasteln, aber ich hab einiges vergessen und stecke bei den Animationen fest. Ich möchte lediglich in einem JFrame ein Hintergrundbild haben und 2 Akteure die sich gleichzeitig in 2 verschiedene Richtungen bewegen(Bild ändert sich nicht). Ich hab die letzten Tagen rumgetestet, aber ich schaffs nicht mehr...
Ich habe ein JImagePanel, in dem jeweils 1 Bild gespeichert und gezeichnet werden sollte. Der Source sieht so aus:
Code:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class JImagePanel extends JPanel{
private BufferedImage image;
int x, y;
public JImagePanel(BufferedImage image, int x, int y) {
super();
this.image = image;
this.x = x;
this.y = y;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, x, y, null);
}
}
Okay. Ich hab nun mehrere Versuche gestartet, aber keiner hat funktioniert.
Ich hab mir gedacht das jedes Bild sein eigenes JPanel hat und ich dann einfach zuerst das Hintergrundbild anzeige und darüber die Akteure. Diese bewege ich dann mit setLocation.
Mein Versuch:
Code:
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class Animation extends JFrame{
private static final long serialVersionUID = 1L;
BufferedImage img1,img2;
JImagePanel pan1,pan2,pan3;
public Animation(){
img1 = loadImage("mario.jpg");
img2 = loadImage("fett.PNG");
pan1 = new JImagePanel(img1,0,0);
pan2 = new JImagePanel(img2,0,0);
pan3 = new JImagePanel(img2,0,0);
this.add(pan1);
this.add(pan2);
this.add(pan3);
setBounds(0, 0, 800, 800);
this.setVisible(true);
}
public BufferedImage loadImage(String ref){
BufferedImage bimg = null;
try {
bimg = ImageIO.read(new File(ref));
} catch (Exception e){
e.printStackTrace();
}
return bimg;
}
public void run() throws InterruptedException{
for(int x = 0; x < 100; x++){
for(int y = 0; y < 100; y++){
pan2.setLocation(x,y);
pan3.setLocation(y,x);
this.update(this.getGraphics());
Thread.sleep(10);
System.out.println("X: "+x+" Y: "+y);
}
}
}
public static void main(String[] args) throws InterruptedException{
Animation ani = new Animation();
ani.run();
}
}
Ich habe den Verdacht, dass das letzte JPanel die anderen rauskickt. Ich möchte jedoch das die letzten JPanels einfach über das schon vorhande drübergezeichnet werden.
Ich hab auch versucht den Konstruktor anzupassen, aber die Akteure werden falsch angezeigt:
Code:
this.add(pan1);
pan1.add(pan2);
pan1.add(pan3);
anstatt
Code:
this.add(pan1);
this.add(pan2);
this.add(pan3);
Was mache ich falsch?
Edit: Füge ich die 2 Panels der Akteure (pan2,pan3) ins pan1 ein dann zeigt es mir, wenn ich die Methode run() starte, die gewünschte Animation an. Allerdings werden die Akteure nicht richtig angezeigt, das Bild flackert wild rum und naja.
Edit2: Ist diese Art von Implementierung/Vorgehensweise überhaupt üblich?
Edit3: Das Update hat das Flackern verursacht. Ich müsste nur noch hinkriegen die Akteure richtig anzuzeigen.
Edit4: Setze ich im Konstruktor nach dem setVisible(true) noch die Location von pan2 und pan3 bleiben die an der gleichen Stelle. In der run-Methode funktioniert dies aber. Ich versuche sie folgendermassen festzulegen:
Code:
pan2.setLocation(0,0);
pan3.setLocation(100,100);
Und das Icon wird immer noch nicht richtig angezeigt. Eigentlich sollten die beiden Vierecke rechts oben das Fett-Icon von Windows darstellen. Hier mal ein Bild:
http://img543.imageshack.us/img543/9081/anifehler.png
Zuletzt bearbeitet: