# Musik & Manifest



## Krypthor (12. Dez 2011)

Hi,
ich bin mit meinem kleinen Spiel fast fertig, mir fehlen nurnoch 2 Sachen.
Die Musik/Sounds und das fertige Projekt dann so exportieren, dass man es nur mit Java, ohne einen Editor öffnen kann.

1. Die Musik
Ich habe viele Tutorials durchgearbeitet, aber bisher ohne Erfolg. 
Mein Projekt ist ja eine Application und für Musik benötigt man ja ein (zusätzliches)Applet.
Wie genau funktioniert es? Ich hab versucht es direkt in die Klasse wo die Musik abgespielt werden soll einzubinden - ging nicht. Auch nicht mit einer extra Klasse.
Es soll auch kein aufwendiger Code sein, sondern die Musik/Sounds sollen nur bei einer bestimmten Aktion abgespielt werden und gestoppt werden.

2. Fertiges Projekt exportieren
Das habe ich auch schon probiert, einmal via Eclipse mit Export und dann als Runnable Jar,
die habe ich dann in einen extra Ordner mit den ganzen Ressourcen getan. Dass hat mit Doppelklick auf die Jar Datei auch funktioniert, nur wenn ich diesen Ordner, bzw. die Datei auf einem anderen Pc öffne,
findet er die Ressourcen nicht (eigentlich ja logisch durch den anderen Pfad).
Ich hab was vom Manifest gehört und danach gegoogelt, aber ich hab nch nicht ganz verstanden was diese Datei dann bringt, bzw. wo sie hin muss?! (auch schon eine mit Eclipse erstellt)

Das alles hätte ja mehr Zeit, aber bis Weihnachten soll das fertig sein.

Würde mich freuen wenn ihr das kurz erklären könntet.
Mit freundlichen Grüßen,

Krypthor


----------



## Ralph-Uwe (12. Dez 2011)

Guten Abend,

zu 1.)
wenn Du Sounds in Dein Projekt einbinden willst, könnte das so funktionieren:
http://www.java-forum.org/spiele-mu...-mp3-lied-laenge-auslesen-jmf.html#post796554  :toll:

zu 2.)
poste mal Code, wie Du Deine Ressourcen öffnest.


Gruß


----------



## Krypthor (13. Dez 2011)

Woa ist das die einzige Möglichkeit um Musik abzuspielen? Das ist ja ein ewig langer Code!

Und die Ressourcen öffne ich so:

```
ImageIcon img = new ImageIcon("Bilder/Spieler.png");
```


----------



## Ralph-Uwe (13. Dez 2011)

Hallo,

zum Laden der Ressourcen solltest Du folgenden Code verwenden:


```
ImageIcon img = deineKlasse.getClass().getResource("Bilder/Spieler.png");
```

dann werden die Bilder auch später in der jar Datei gefunden. 

Die Klasse sound ist nur ein vorschlag. Du muß ja nicht alle Möglichkeiten nutzen.

MP3 SPI for Java Sound

ist auch eine Möglichkeit

Gruß


----------



## Krypthor (13. Dez 2011)

Das heißt ich brauche gar kein Manifest, sondern kann die Datei einfach so Exportieren und dann in den Ordner mit den Ressourcen tun?!


----------



## Ralph-Uwe (13. Dez 2011)

ich habe bei meinem Programm das Verzeichnis Bilder mit in die 
Verzeichnisse bin und src kopiert.

Wenn das Projekt mit Eclipse exportiert wird, werden alle benötigten Daten 
in die jar Datei gepackt. 
Damit die Bilder in der jar Datei gefunden werden, benötigst Du den oben 
beschriebenen Aufruf.

Gruß


----------



## Krypthor (13. Dez 2011)

Mir ist grade aufgefallen das das bei mir irgendwie nicht geht (wahrscheinlich weil ichs falsch mache) 
Wenn ich in der Medipack Klasse das Bild verwende dann doch so:

```
ImageIcon imgmedi1 = Medipack.getClass().getResource("Bilder/Medipack.png");
```
aber:
"Cannot make a static reference to the non-static method getClass() from the type Object"


----------



## Ralph-Uwe (13. Dez 2011)

probiere es mal so:


```
public class Medipack{
  static ImageIcon imgmedi1;

  ...

  public Medipack(){
    imgmedi1 = medipack.getClass().getResource("Bilder/Medipack.png");
  }

...

  public static void main(String args[]) {
    Medipack medipack = new Medipack();
  }
}
```

In der Main-Methode wird eine Variable medipack erzeugt. Mit deren Hilfe
wird der Speicherort der Bilder gefunden.
Die Variable wird klein geschrieben.

Gruß


----------



## Krypthor (14. Dez 2011)

Oh ich glaub ich hab da was falsch verstanden, sorry ich arbeite noch nicht so lange mit java,
Ich hab nämlich noch garkeine medipack Variable.

Ich hab nur die Medipack Klasse die ich dann in meiner "Map" Klasse verwende, also wo das Medipack 
"gesetzt" werden soll, aber wie und wo muss ich jetzt eine Variable erstellen ? In der Map Klasse oder?

Ich hatte das Medipack bes jetzt nähmlich so:


```
public class Medipack {
int y, x;
boolean visible;
static ImageIcon imgmedi1;

	public Medipack(){
		Object medipack;
		imgmedi1 = medipack.getClass().getResource("Bilder/Medipack.png");
		visible = false;
	}
	  public static void main(String args[]) {
		    Medipack medipack = new Medipack();
		  }
}
```

aber der gesamte
	
	
	
	





```
medipack.getClass().getResource("Bilder/Medipack.png");
```
ist rot unterstrichen und ich soll statt static ImageIcon static URL erstellen?!

Ich hab auch grade nochmal gegoogelt; wie siehts damit aus, findet der die Bilder nach dem Export auch auf anderen Rechnern ?: 

```
ImageIcon img1 = new ImageIcon(Start.class.getResource("/Bilder/Menü/Menü.png"));
```
Ich hab die Bilder jetzt einfach in den bin Ordner getan.


----------



## Ralph-Uwe (14. Dez 2011)

Asche auf mein Haupt  ich habe mich total verhauen :shock:

Ich hatte mein Beispiel zusammengebastelt, ohne es zu prüfen :autsch:

Folgendes Beispiel funktioniert:

```
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class Medipack {

int y, x;
static JFrame frame = new JFrame(); 
boolean visible;

static Image imgmedi1;
 
    public Medipack(){
    	imgmedi1 =  Toolkit.getDefaultToolkit().getImage(getClass().getResource("ball3.png"));
    	frame.setTitle("Test ");
	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setPreferredSize(new Dimension(100,100));
        frame.setIconImage(imgmedi1);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
      public static void main(String args[]) {
            Medipack medipack = new Medipack();
          }
}
```

ich habe die jar-Datei noch mit angehängt.

Was hast Di die#r mit dem Sound überlegt?


Gruß


----------



## Krypthor (14. Dez 2011)

Kein Problem 
muss ich das 
	
	
	
	





```
imgmedi1 =  Toolkit.getDefaultToolkit().getImage(getClass().getResource("ball3.png"));
```
in der Main Klasse haben oder kann das auch in den anderen Klassen sein?
bzw. wie mach ich das wenn ich dann 
	
	
	
	





```
imgmedi1.getImage()
```
machen will? 

Das mit dem sound hab ich so hinbekommen:

```
...
	if (key == KeyEvent.VK_P){
		shot();
         }
...
	public static void shot(){
		AudioPlayer MGP = AudioPlayer.player;
		AudioStream BGM;
		AudioData MD;
		ContinuousAudioDataStream loop = null;
		AudioDataStream play = null;
		
		try{
			BGM = new AudioStream(new FileInputStream ("shot1.wav"));
			MD = BGM.getData();
			loop = new ContinuousAudioDataStream(MD);
			play = new AudioDataStream(MD);
		}catch(IOException error){}
		MGP.start(play);
	}
}
```

Allerdings funktioniert es mit der Musik noch nicht. Ich habs so versucht:


```
public Map1(){
   ...
   musik();

...
	public static void musik(){
		AudioPlayer MGP = AudioPlayer.player;
		AudioStream BGM;
		AudioData MD;
		ContinuousAudioDataStream loop = null;
		AudioDataStream play = null;
		
		try{
			BGM = new AudioStream(new FileInputStream ("music.wav"));
			MD = BGM.getData();
			loop = new ContinuousAudioDataStream(MD);
			play = new AudioDataStream(MD);
		}catch(IOException error){}
		MGP.start(loop);
	}
}
```

Muss die wav Datei eine bestimmte Länge haben?


----------



## Ralph-Uwe (14. Dez 2011)

Hallo 



> muss ich das
> Java Code: Quelltext in neuem Fenster öffnen
> 
> ```
> ...



Das geht auch in anderen Klassen, es kann aber zu einem Problem kommen, wenn
die andere Klasse nicht im gleichen Verzeichnis ist wie Main-Klasse.



> bzw. wie mach ich das wenn ich dann
> 
> ```
> imgmedi1.getImage()
> ...



funktioniert bei ImageIcon.

Beim Sound, werden alle Variabeln immer wieder neu erzeugt. Das kostet Performance.
Lagere den Sound in eine eigene Klasse aus.
Dann kannst Du beim Initialisieren des Hauptprogramm eine oder mehrere neue Instanz mit dem entsprechenden Dateinamen erzeugen und bei Bedarf mit einem Startbefehl abspielen.



Gruß


----------



## Krypthor (15. Dez 2011)

hmm, es funktioniert immer noch nicht. Ich hab das auch noch nicht so ganz verstanden wann und wie die Methode mit den
Bilder jetzt benutzt.
z.B. hab ichs hier mal mit dem Bild ausprobiert;
aber ich kann es nicht mit dem Label verwenden?!


```
public class Start {
	Image img1 = Toolkit.getDefaultToolkit().getImage(getClass().getResource("Bilder/Menü/Menü.png"));
	ImageIcon img2 = new ImageIcon("Bilder/Menü/Start.png");
	ImageIcon img22 = new ImageIcon("Bilder/Menü/Start2.png");
	ImageIcon img3 = new ImageIcon("Bilder/Menü/OPTIONEN.png");
	ImageIcon img33 = new ImageIcon("Bilder/Menü/OPTIONEN2.png");
	ImageIcon img4 = new ImageIcon("Bilder/Menü/ENDE.png");
	ImageIcon img44 = new ImageIcon("Bilder/Menü/ENDE2.png");
	
	public Start(){
		
		final JLabel labelmenü = new JLabel(img1);  //<--------Problem
		final JLabel labelstart = new JLabel(img2);
		final JLabel labelsteuerung = new JLabel(img3);
		final JLabel labelende = new JLabel(img4);
		labelmenü.setBounds(0, 0, 600, 400);
		labelstart.setBounds(250, 150, 100, 30);
		labelsteuerung.setBounds(220, 200, 150, 30);
		labelende.setBounds(250, 250, 100, 30);
		
		final JFrame frame1 = new JFrame();
		frame1.setLocation(100,100);
		frame1.setSize(606,426);
		frame1.setTitle("War");
		frame1.setResizable(false);
		frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame1.add(labelsteuerung);
		frame1.add(labelende);
		frame1.add(labelstart);
		frame1.add(labelmenü);
		frame1.setVisible(true);
		
		labelstart.addMouseListener(new MouseListener() {

			@Override
			public void mouseClicked(MouseEvent e) {
```


----------



## Ralph-Uwe (15. Dez 2011)

poste mal die ganze Klasse

Gruß


----------



## Ralph-Uwe (15. Dez 2011)

das Problem ist nicht das Lader der Graphik sondern JLabel.
JLabel benötigt ein ImageIcon.

Probiers mal so:

```
ImageIcon icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("Bilder/Menü/Menü.png")));
JLabel labelmenü = new JLabel(icon);
```


----------



## Krypthor (15. Dez 2011)

Wenn ich die Datei jetzt aber exportiere, und einen Doppelklick drauf mache, öffnet sich garnichts mehr, nichtmal mehr ein leeres Fenster.
Am besten ich poste mal das ganze Projekt (kann viele umständliche Codes enthalten ;D )

Die Klasse Start:

```
public class Start {
	ImageIcon img1 = new ImageIcon("Bilder/Menü/Menü.png");
	ImageIcon img2 = new ImageIcon("Bilder/Menü/Start.png");
	ImageIcon img22 = new ImageIcon("Bilder/Menü/Start2.png");
	ImageIcon img3 = new ImageIcon("Bilder/Menü/OPTIONEN.png");
	ImageIcon img33 = new ImageIcon("Bilder/Menü/OPTIONEN2.png");
	ImageIcon img4 = new ImageIcon("Bilder/Menü/ENDE.png");
	ImageIcon img44 = new ImageIcon("Bilder/Menü/ENDE2.png");
	
	public Start(){
		
		final JLabel labelmenü = new JLabel(img1);
		final JLabel labelstart = new JLabel(img2);
		final JLabel labelsteuerung = new JLabel(img3);
		final JLabel labelende = new JLabel(img4);
		labelmenü.setBounds(0, 0, 600, 400);
		labelstart.setBounds(250, 150, 100, 30);
		labelsteuerung.setBounds(220, 200, 150, 30);
		labelende.setBounds(250, 250, 100, 30);
		
		final JFrame frame1 = new JFrame();
		frame1.setLocation(100,100);
		frame1.setSize(606,426);
		frame1.setTitle("War");
		frame1.setResizable(false);
		frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame1.add(labelsteuerung);
		frame1.add(labelende);
		frame1.add(labelstart);
		frame1.add(labelmenü);
		frame1.setVisible(true);
		
		labelstart.addMouseListener(new MouseListener() {

			@Override
			public void mouseClicked(MouseEvent e) {
				
				frame1.remove(labelmenü);
				frame1.remove(labelstart);
				frame1.remove(labelsteuerung);
				frame1.remove(labelende);
                Interface i = new Interface();
                frame1.add(i);
                i.requestFocus();
                frame1.validate();
			}

			@Override
			public void mouseEntered(MouseEvent e) {
				labelstart.setIcon(img22);
			}

			@Override
			public void mouseExited(MouseEvent e) {
				labelstart.setIcon(img2);
			}

			@Override
			public void mousePressed(MouseEvent e) {
				
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				
			}
			
		});
		
		labelsteuerung.addMouseListener(new MouseListener() {

			@Override
			public void mouseClicked(MouseEvent e) {
				frame1.remove(labelstart);
				frame1.remove(labelsteuerung);
				frame1.remove(labelende);
				//frame1.add();
				frame1.validate();
			}

			@Override
			public void mouseEntered(MouseEvent e) {
				labelsteuerung.setIcon(img33);
			}

			@Override
			public void mouseExited(MouseEvent e) {
				labelsteuerung.setIcon(img3);
			}

			@Override
			public void mousePressed(MouseEvent e) {
				
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				
			}
			
		});
		
		labelende.addMouseListener(new MouseListener() {

			@Override
			public void mouseClicked(MouseEvent e) {
				System.exit(0);
			}

			@Override
			public void mouseEntered(MouseEvent e) {
				labelende.setIcon(img44);
			}

			@Override
			public void mouseExited(MouseEvent e) {
				labelende.setIcon(img4);
			}

			@Override
			public void mousePressed(MouseEvent e) {
				
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				
			}
			
		});
	}
	
public static void main(String[] args){
	new Start();
	}
}
```

Die Klasse Player :

```
public class Player{
	int x, y, dx, dy, nx, nx2, left, richtungs;
	int richtung, magazin, magazinMP, waffe;
	Image still;
	ImageIcon i = new ImageIcon("Bilder/Spielersteht.png");
	ImageIcon ls = new ImageIcon("Bilder/SpielerseiteLsteht.png");
	ImageIcon rs = new ImageIcon("Bilder/SpielerseiteRsteht.png");
	ImageIcon ud = new ImageIcon("Bilder/Spieler.gif");
	ImageIcon l = new ImageIcon("Bilder/SpielerseiteL.gif");
	ImageIcon r = new ImageIcon("Bilder/SpielerseiteR.gif");
	private long lastPressMS = -1;
	
	static ArrayList kugeln;
	
	public Player(){
		still = i.getImage();
		kugeln = new ArrayList();
		richtung = 3;
		magazin = 7;
		magazinMP = 20;
		waffe = 1;
	}
	
	public int Richtung(){
		return richtung;
	}
	
	public int Waffe(){
		return waffe;
	}
	
	public static ArrayList getKugeln(){
		return kugeln;
	}
	
	public Rectangle getBounds(){
		return new Rectangle(x, y, 14, 18);
	}
	
	public void fire(){
		Kugel z = new Kugel(x, y, richtung);
		kugeln.add(z);
	}
	
	public void move(){
			x = x + dx;
			y = y + dy;
	}
	
	public int getX(){
		return x;
	}
	public int getY(){
		return y;
	}
	public Image getImage(){
		return still;
	}

	public void keyPressed(KeyEvent e){
		int key = e.getKeyCode(); 
	
		if (key == KeyEvent.VK_LEFT){
			dx = -1;
			still = l.getImage();
			richtung = 4;
		}
		if (key == KeyEvent.VK_RIGHT){
			dx = +1;
			still = r.getImage();
			richtung = 2;
		}
		if (key == KeyEvent.VK_UP){
			dy = -1;
			still = ud.getImage();
			richtung = 1;
		}
		if (key == KeyEvent.VK_DOWN){
			dy = +1;
			still = ud.getImage();
			richtung = 3;
		}
		if (key == KeyEvent.VK_I){
			if(waffe == 1){waffe = 2;}
			else{waffe = 1;}
		}
		if (key == KeyEvent.VK_O){
			reload();
			magazin = 7;
			magazinMP = 20;
		}
		if (key == KeyEvent.VK_P){
			if(waffe == 1){
				if(magazin >= 1){
					long current = System.currentTimeMillis();
					if (lastPressMS == -1  || current > lastPressMS + 500) {
						lastPressMS = current;
						fire();
						shot();
						magazin = magazin - 1;
					}
				}
			}
			if(waffe == 2){
				if(magazinMP >= 1){
					long current = System.currentTimeMillis();
					if (lastPressMS == -1  || current > lastPressMS + 60) {
						lastPressMS = current;
						fire();
						shot2();
						magazinMP = magazinMP - 1;
					}
				}
			}
		}
	}

	public void keyReleased(KeyEvent e){
		int key = e.getKeyCode(); 
	
		if (key == KeyEvent.VK_LEFT){
			dx = 0;
			still = ls.getImage();
			richtung = 4;
		}
		if (key == KeyEvent.VK_RIGHT){
			dx = 0;
			still = rs.getImage();
			richtung = 2;
		}
		if (key == KeyEvent.VK_UP){
			dy = 0;
			still = i.getImage();
			richtung = 1;
		}
		if (key == KeyEvent.VK_DOWN){
			dy = 0;
			still = i.getImage();
			richtung = 3;
		}
		if (key == KeyEvent.VK_P){
			
		}
		System.out.println(x + "=x ");
		System.out.println(y + "=y ");
	}
	
	public static void shot(){
		AudioPlayer MGP = AudioPlayer.player;
		AudioStream BGM;
		AudioData MD;
		ContinuousAudioDataStream loop = null;
		AudioDataStream play = null;
		
		try{
			BGM = new AudioStream(new FileInputStream ("shot1.wav"));
			MD = BGM.getData();
			loop = new ContinuousAudioDataStream(MD);
			play = new AudioDataStream(MD);
		}catch(IOException error){}
		MGP.start(play);
	}
	public static void reload(){
		AudioPlayer MGP = AudioPlayer.player;
		AudioStream BGM;
		AudioData MD;
		ContinuousAudioDataStream loop = null;
		AudioDataStream play = null;
		
		try{
			BGM = new AudioStream(new FileInputStream ("reload.wav"));
			MD = BGM.getData();
			loop = new ContinuousAudioDataStream(MD);
			play = new AudioDataStream(MD);
		}catch(IOException error){}
		MGP.start(play);
	}
	public static void shot2(){
		AudioPlayer MGP = AudioPlayer.player;
		AudioStream BGM;
		AudioData MD;
		ContinuousAudioDataStream loop = null;
		AudioDataStream play = null;
		
		try{
			BGM = new AudioStream(new FileInputStream ("shot3.wav"));
			MD = BGM.getData();
			loop = new ContinuousAudioDataStream(MD);
			play = new AudioDataStream(MD);
		}catch(IOException error){}
		MGP.start(play);
	}
}
```

Die Klasse Player2 (ich weis, hätte ich zusammen fassen können)

```
public class Player2{
	int x, y, dx, dy, nx, nx2, left;
	Image still2;
	ImageIcon i = new ImageIcon("Bilder/Spielersteht.png");
	ImageIcon ls = new ImageIcon("Bilder/SpielerseiteLsteht.png");
	ImageIcon rs = new ImageIcon("Bilder/SpielerseiteRsteht.png");
	ImageIcon ud = new ImageIcon("Bilder/Spieler.gif");
	ImageIcon l = new ImageIcon("Bilder/SpielerseiteL.gif");
	ImageIcon r = new ImageIcon("Bilder/SpielerseiteR.gif");

	public Player2(){
		still2 = i.getImage();
	}
	
	public Rectangle getBounds(){
		return new Rectangle(x, y, 14, 18);
	}

	public void move(){	
			x = x + dx;
			y = y + dy;
	}
	
	
	public int getX(){
		return x;
	}
	public int getY(){
		return y;
	}
	public Image getImage(){
		return still2;
	}

	public void keyPressed(KeyEvent e){
		int key = e.getKeyCode(); 
	
		if (key == KeyEvent.VK_A){
			dx = -1;
			still2 = l.getImage();
		}
		if (key == KeyEvent.VK_D){
			dx = +1;
			still2 = r.getImage();
		}
		if (key == KeyEvent.VK_W){
			dy = -1;
			still2 = ud.getImage();
		}
		if (key == KeyEvent.VK_S){
			dy = +1;
			still2 = ud.getImage();
		}
	}

	public void keyReleased(KeyEvent e){
		int key = e.getKeyCode(); 
	
		if (key == KeyEvent.VK_A){
			dx = 0;
			still2 = ls.getImage();
		}
		if (key == KeyEvent.VK_D){
			dx = 0;
			still2 = rs.getImage();
		}
		if (key == KeyEvent.VK_W){
			dy = 0;
			still2 = i.getImage();
		}
		if (key == KeyEvent.VK_S){
			dy = 0;
			still2 = i.getImage();
		}
	}
}
```

Die Klasse Interface (sozusagen meine Map)

```
public class Interface extends JPanel implements ActionListener{
Player p;
Player2 p2;
Image img2, p2leben, pleben, p10l, p9l, p8l, p7l, p6l, p5l, p4l, p3l, p2l, p1l, p0l;
Timer time;
int pkill, p2kill;
Medipack medipack;

	public Interface(){
		p = new Player();
		p2 = new Player2();
        pkill = 60;
        p2kill = 60;
		addKeyListener(new AL());
		addKeyListener(new AL2());
		setFocusable(true);
		ImageIcon i = new ImageIcon("Unbenannt.png");
		ImageIcon pl10 = new ImageIcon("Bilder/Leben/Leben10.png");
		ImageIcon pl9 = new ImageIcon("Bilder/Leben/Leben9.png");
		ImageIcon pl8 = new ImageIcon("Bilder/Leben/Leben8.png");
		ImageIcon pl7 = new ImageIcon("Bilder/Leben/Leben7.png");
		ImageIcon pl6 = new ImageIcon("Bilder/Leben/Leben6.png");
		ImageIcon pl5 = new ImageIcon("Bilder/Leben/Leben5.png");
		ImageIcon pl4 = new ImageIcon("Bilder/Leben/Leben4.png");
		ImageIcon pl3 = new ImageIcon("Bilder/Leben/Leben3.png");
		ImageIcon pl2 = new ImageIcon("Bilder/Leben/Leben2.png");
		ImageIcon pl1 = new ImageIcon("Bilder/Leben/Leben1.png");
		ImageIcon pl0 = new ImageIcon("Bilder/Leben/Leben0.png");
		img2 = i.getImage();
		p10l = pl10.getImage(); p9l = pl9.getImage(); p8l = pl8.getImage(); p7l = pl7.getImage(); p6l = pl6.getImage(); 
		p5l = pl5.getImage(); p4l = pl4.getImage(); p3l = pl3.getImage(); p2l = pl2.getImage(); p1l = pl1.getImage(); p0l = pl0.getImage(); 
		time = new Timer(5, this); 
		time.start();
		p.x = 50;
		p.y = 220;
		p2.x = 540;
		p2.y = 220;
	}
	
	public void actionPerformed(ActionEvent e) {
        checkCollisions();
		p.move();
		if (p.x <= -1){p.x = p.x + 1;}
		if(p.x >= 586){p.x = p.x - 1;}
		if (p.y <= 58){p.y = p. y + 1;}
		if(p.y >= 382){p.y = p.y - 1;}
		if (p.x == 106 && p.y >= 108 && p.y <= 325){p.x = p.x - 1;} //e
		if (p.y == 325 && p.x >= 106 && p.x <= 398){p.y = p.y + 1;} //f
		if (p.x == 398 && p.y >= 302 && p.y <= 325){p.x = p.x + 1;} //g
		if (p.y == 302 && p.x >= 106 && p.x <= 398){p.y = p.y - 1;} //h
		if (p.x == 132 && p.y >= 178 && p.y <= 304){p.x = p.x + 1;} //i
		if (p.y == 182 && p.x >= 130 && p.x <= 148){p.y = p.y + 1;} //j
		if (p.x == 147 && p.y >= 180 && p.y <= 246){p.x = p.x - 1;} //k
		if (p.x == 161 && p.y >= 107 && p.y <= 246){p.x = p.x + 1;} //k2
		if (p.y == 246 && p.x >= 147 && p.x <= 161){p.y = p.y + 1;} //k3
		if (p.y == 107 && p.x >= 105 && p.x <= 161){p.y = p.y - 1;} //k4/l
		
		p2.move();
		ArrayList kugeln = Player.getKugeln();
		for (int w = 0; w < kugeln.size(); w++){
			Kugel k = (Kugel) kugeln.get(w);
			if(k.getVisible() == true){
				k.move();
			}
			else{
				kugeln.remove(w);
			}
		}
		repaint();
	}
	
	public void checkCollisions(){
		Rectangle r1 = p.getBounds();
        Rectangle r2 = p2.getBounds();
        ArrayList kugeln = p.getKugeln();
        
		if(p2kill == 60){
			p2leben = p10l; }
		if(p2kill <= 59 && p2kill >= 54){
			p2leben = p9l; }
		if(p2kill <= 53 && p2kill >= 48){
			p2leben = p8l; }
		if(p2kill <= 47 && p2kill >= 42){
			p2leben = p7l; }
		if(p2kill <= 41 && p2kill >= 36){
			p2leben = p6l; }
		if(p2kill <= 35 && p2kill >= 30){
			p2leben = p5l; }
		if(p2kill <= 29 && p2kill >= 24){
			p2leben = p4l; }
		if(p2kill <= 23 && p2kill >= 18){
			p2leben = p3l; }
		if(p2kill <= 17 && p2kill >= 12){
			p2leben = p2l; }
		if(p2kill <= 11 && p2kill >= 6){
			p2leben = p1l; }
		if(p2kill <= 5 && p2kill >= 0){
			p2leben = p0l; }
		
		if(pkill == 60){
			pleben = p10l; }
		if(pkill <= 59 && p2kill >= 54){
			pleben = p9l; }
		if(pkill <= 53 && p2kill >= 48){
			pleben = p8l; }
		if(pkill <= 47 && p2kill >= 42){
			pleben = p7l; }
		if(pkill <= 41 && p2kill >= 36){
			pleben = p6l; }
		if(pkill <= 35 && p2kill >= 30){
			pleben = p5l; }
		if(pkill <= 29 && p2kill >= 24){
			pleben = p4l; }
		if(pkill <= 23 && p2kill >= 18){
			pleben = p3l; }
		if(pkill <= 17 && p2kill >= 12){
			pleben = p2l; }
		if(pkill <= 11 && p2kill >= 6){
			pleben = p1l; }
		if(pkill <= 5 && p2kill >= 0){
			pleben = p0l; }
		
		for (int w = 0; w < kugeln.size(); w++)
        {
                Kugel k = (Kugel) kugeln.get(w);
                Rectangle k1 = k.getBounds();
                if (k1.intersects(r2))
                {
                	p2kill = p2kill - 6;
                	k.setVisible(false);
                }
                else if (k1.intersects(r2))
                {
                	p2kill = p2kill - 1;
                }
        }
		
        if(p2kill <= 0){
        	p2tot = true;
        	System.out.print("Player Tot");
        }
        if(pkill <= 0){
        	ptot = true;
        	System.out.print("Player2 Tot");
        }
	}
	
	boolean ptot = false;
	public boolean pdead(){
		return ptot;
	}
	boolean p2tot = false;
	public boolean p2dead(){
		return p2tot;
	}
	
	public void paint(Graphics g) {
		
		super.paint(g);
			Graphics2D g2d = (Graphics2D) g;
			g2d.drawImage(img2, 0, 0, null);
			g2d.drawImage(p.getImage(), p.x, p.y, null);
			g2d.drawImage(p2.getImage(), p2.x, p2.y, null);
			g2d.drawImage(p2leben, 400, 15, null);
			g2d.drawImage(pleben, 100, 15, null);
			ArrayList kugeln = Player.getKugeln();
			for (int w = 0; w < kugeln.size(); w++){
				Kugel k = (Kugel) kugeln.get(w);
				g2d.drawImage(k.getImage(), k.getX(), k.getY(), null);
			}
	}
	
	private class AL extends KeyAdapter{
		public void keyReleased(KeyEvent e){
			p.keyReleased(e);
		}
		public void keyPressed(KeyEvent e){
			p.keyPressed(e);
		}
	}
	private class AL2 extends KeyAdapter{
		public void keyReleased(KeyEvent e){
			p2.keyReleased(e);
		}
		public void keyPressed(KeyEvent e){
			p2.keyPressed(e);
		}
	}
}
```

Die Klasse Kugel:

```
public class Kugel {
int y, x, a;
Image imgk;
boolean visible;
private int richtung = 0;

	public Kugel(int startX, int startY, int richtungAmAnfang){
		x = startX;
		y = startY;
		richtung = richtungAmAnfang;
		ImageIcon neueKugel = new ImageIcon("Bilder/Kugel.png");
		imgk = neueKugel.getImage();
		visible = true;
	}
	
	public Rectangle getBounds(){
		return new Rectangle(x, y, 10, 10);
    }
	public int getX(){
		return x;
	}
	public int getY(){
		return y;
	}
	public boolean getVisible(){
		return visible;
	}
	public Image getImage(){
		return imgk;
	}
	
    public void setVisible(boolean isVisible)
    {
            visible = isVisible;
    }

 
    public void move(){
        if(this.richtung == 3){
			y = y + 10;
		}
		if(this.richtung == 4){
			x = x - 10;
		}
		if(this.richtung == 1){
			y = y - 10;
		}
		if(this.richtung == 2){
			x = x + 10;
		}
		if(x > 600){
			visible = false;
		}
		if(y > 400){
			visible = false;
		}
		if(x < 2){
			visible = false;
		}
		if(y < 2){
			visible = false;
		}
  }
}
```

Noch was, manchmal bewegt sich mein Charakter nur halb so schnell, woran liegt dass?
Das war schon öfter so, nur jetzt beweg ich mich am anfang so langsam und wenn ich
"O" also Nachladen drücke, wird er so für 5-6 sek schnell und danach wieder langsam?!


----------



## Ralph-Uwe (15. Dez 2011)

mir ist aufgefallen, dass Du eine Klasse "Interface" genannt hast.
Das ist sehr schlecht, da das Wort "Interface" ein Schlüsselwort ist.
Es kann dardurch zu komischen Fehlern kommen.

Benenne die Klasse auf jeden Fall um.


----------

