Animation

TimeIsTheKey

Aktives Mitglied
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:

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:

Simon_Flagg

Bekanntes Mitglied
@ animation: mach eine schleife und ruf in der immer eine methode auf, die die figuren um eins weiterbewegt, mach ein repaint und dann Thread.sleep(kawielang)

lg
 

TimeIsTheKey

Aktives Mitglied
Ich habs schon öfters gesehen mit run,doLogics, Runnable usw. Weil ich allerdings nur darauf aus bin 2 Akteure zu bewegen habe ich die Schleife in der run-Methode gemacht. Im Prinzip geht es jetzt nur um die falsche Anzeige. Die Icons werden falsch angezeigt und ich finde nicht heraus wieso...

Im Moment sieht es so aus:
Code:
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Versuch008 extends JFrame{

	private static final long serialVersionUID = 1L;
	BufferedImage img1,img2;
	JImagePanel pan1,pan2,pan3;
	
	public Versuch008(){
		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);
		pan1.add(pan2);
		pan1.add(pan3);
		this.add(pan1);
		this.setBounds(0, 0, 800, 800);
		this.setVisible(true);
		pan2.setLocation(0,0);
		pan3.setLocation(100,100);
	}
	
	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{
		Versuch008 versuch1 = new Versuch008();
		//versuch1.run();
	}
	
}

Pan2 und Pan3 nehmen nicht die richtige Position, sondern sind wie im Bild des Startposts rechts oben. Und naja, die Icons sind 16x16 gross, aber es werden ca. 9x9 oder so gezeigt.

Edit: Füge ich in JImagePanel folgende Methoden hinzu funktioniert die Animation nicht mehr:

Code:
public int getX(){
		return x;
	}
	
	public int getY(){
		return y;
	}
	
	public int getImageH(){
		return image.getHeight();
	}
	
	public int getImageW(){
		return image.getWidth();
	}

Wieso? :autsch:
Edit: Weil getX und getY der Komponente überschrieben wird -.-

Edit2: Erledigt. Lag am LayoutManager...
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Animation/links-rechts Java Basics - Anfänger-Themen 9
G Animation Timer Nano Time Java Basics - Anfänger-Themen 2
J Animation eines Körpers auf der schiefen Ebene Java Basics - Anfänger-Themen 11
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
D Animation JPanel Java Basics - Anfänger-Themen 1
WetWer Animation JLabel Java Basics - Anfänger-Themen 2
A Animation einer Zahnradpumpe Java Basics - Anfänger-Themen 6
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
K Möglichkeiten um eine einfache Animation darzustellen Java Basics - Anfänger-Themen 7
C Animation nur einmal durchführen Java Basics - Anfänger-Themen 3
N Bilderarray als animation ablaufen lassen?? Java Basics - Anfänger-Themen 6
G Threads SuM Class Animation Java Basics - Anfänger-Themen 13
J .gif Animation Java Basics - Anfänger-Themen 4
J Animation Java Basics - Anfänger-Themen 5
M Animation in einem Multiplayerspiel Java Basics - Anfänger-Themen 3
S Animation nach bestimmter Zeit ausführen Java Basics - Anfänger-Themen 3
M Animation von Kreisen Java Basics - Anfänger-Themen 15
U Y-Animation Java Basics - Anfänger-Themen 3
K Animation: Ball fällt herunter Java Basics - Anfänger-Themen 2
G Zufalls Animation Java Basics - Anfänger-Themen 9
Luk10 einfach animation Java Basics - Anfänger-Themen 2
H Animation malen! Java Basics - Anfänger-Themen 2
S JTable mit Animation??? Java Basics - Anfänger-Themen 7
B Flash Animation SWF in Java absielen Java Basics - Anfänger-Themen 18
R Probleme mit Animation und der erstellung einer jar Datei. Java Basics - Anfänger-Themen 11
U Animation bleibt leer (weiß) Java Basics - Anfänger-Themen 5
T Animation übermalt panels Java Basics - Anfänger-Themen 6
M Simple Animation funktioniert nicht (JFrame, Canvas, Thread) Java Basics - Anfänger-Themen 6
S Desktop Animation Java Basics - Anfänger-Themen 15
T Abspeichern einer Animation in *.bmp Java Basics - Anfänger-Themen 12
K animation in applet, thread problem (?) Java Basics - Anfänger-Themen 3
K Animation warten lassen Java Basics - Anfänger-Themen 9
F Animation Java Basics - Anfänger-Themen 3
J Animation Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben