# FIguranimation bei Laufrichtungen ändern?!



## Koti (8. Apr 2015)

Ich bin jetzt soweit das meine Figur Laufen kann und Springen kann. Nun habe ich das Problem das ich möchte das wenn die Figur nach Links läuft, auch nach Links schaut. Nur da ich ziemlich neu bin hätte ich keine Idee wo ich anfangen sollte. 

Ich möchte nicht das mir irgendjemand einen ganzen Code schreibt wobei ich nichts lerne, sondern ich bräuchte nur eine kleine Hilfe, wie ich es machen kann.

Mein aktueller Quellcode:

```
package frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.Timer;


public class gui extends JPanel implements ActionListener{
	
	int figur_y = 0;
	Timer time;
	Image img;
	Image img2;
	Image img3;
	int X_Bild;
	int nx,nx2;
	int anzahl = 0;
	int anzahl2 = 0;
	int key;
	int lauf;
	int left = -200;
	int right = -200;
	
	public gui(){
		addKeyListener(new AL());
		nx = 0;
		nx2 = 480;
		key = 0;
		lauf = 0;
		setFocusable(true);
		ImageIcon u = new ImageIcon((getClass().getResource("Background.jpg")));
		img = u.getImage();
		ImageIcon c1 = new ImageIcon((getClass().getResource("Character 1.png")));
		img2 = c1.getImage();
		time = new Timer(5,this);
		time.start();
		Sprung sprung = new Sprung();
	}
	public void actionPerformed(ActionEvent e){
		bewegen();
		figur_y = Sprung.sprungposition;
		repaint();
	}
	public void paint(Graphics g){
		super.paint(g);
		Graphics2D f2 = (Graphics2D)g;
		if(getX_Bild() == 0 + (anzahl *50)){
			anzahl += 1;
			nx = 500;
		}
		if(getX_Bild() == 100 + (anzahl2 *100)){
			anzahl2 += 1;
			nx2 = 0;
		}
		if(getX_Bild() >= 100){
			f2.drawImage(img,200+nx,0,null);
		}
		f2.drawImage(img,480-nx2,0,null);
		f2.drawImage(img2,left,figur_y,null);
	}
	private int getX_Bild() {
		return X_Bild;
	}
	public void bewegen(){
		if(lauf != -1){
			if(left + lauf <=40000){
				left += lauf;
			}else {
				X_Bild += lauf;
				nx += lauf;
				nx2 += lauf;
			}
		}else {
			if(left + lauf > -340){
				left += lauf;
				lauf = -1;
				}			
			}
		if(lauf != -1){		
			if(left - lauf > 700){
				lauf = -1;			
			}
		}
	}	
	private class AL extends KeyAdapter{
		public AL(){	
	}
	public void keyReleased(KeyEvent e){
		key = e.getKeyCode();
		if(key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT){
			lauf = 0;
			}
		}
	public void keyPressed(KeyEvent e){
		key = e.getKeyCode();
		if(key == KeyEvent.VK_RIGHT){
			lauf = 1;
			}
		if(key == KeyEvent.VK_LEFT){
			lauf = -1;
			}	
			if(key == KeyEvent.VK_SPACE){
				if(Sprung.fertig == true)
				Sprung();
			}
		}
	}		
	public void Sprung(){
		Sprung SprungAnimation = new Sprung();
		SprungAnimation.start();
	}
}
```


----------



## lord239123 (8. Apr 2015)

Du kannst in einer Variable festhalten, in welche Richtung deine Figur schaut.
Jedes mal, wenn eine Pfeiltaste gedrückt wird, wird dann der Wert dieser Variable geändert.
Du musst dann bei deiner Animation nur den Wert dieser Variablen berücksichtigen.


----------



## Koti (8. Apr 2015)

lord239123 hat gesagt.:


> Du kannst in einer Variable festhalten, in welche Richtung deine Figur schaut.
> Jedes mal, wenn eine Pfeiltaste gedrückt wird, wird dann der Wert dieser Variable geändert.
> Du musst dann bei deiner Animation nur den Wert dieser Variablen berücksichtigen.



Danke ich habe jetzte die Varible Blickrichtung gesetzt nur wenn ich jetzt nach Links drücke kommt nicht die Figur die nach Links schaut sondern sie verschwindet einfach.

Quellcode:

```
package frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.Timer;


public class gui extends JPanel implements ActionListener{
	
	int figur_y = 0;
	int blickrichtung = 0;
	Timer time;
	Image img;
	Image img2;
	Image img3;
	int X_Bild;
	int nx,nx2;
	int anzahl = 0;
	int anzahl2 = 0;
	int key;
	int lauf;
	int left = -200;
	int right = -200;
	
	public gui(){
		addKeyListener(new AL());
		nx = 0;
		nx2 = 480;
		key = 0;
		lauf = 0;
		setFocusable(true);
		ImageIcon u = new ImageIcon((getClass().getResource("Background.jpg")));
		img = u.getImage();
		ImageIcon c1 = new ImageIcon((getClass().getResource("Character 1.png"))); //GUCKT NACH RECHTS
		img2 = c1.getImage();
		ImageIcon c2 = new ImageIcon((getClass().getResource("Character 2.png"))); //GUCKT NACH LINKS
		img3 = c2.getImage();
		time = new Timer(5,this);
		time.start();
		Sprung sprung = new Sprung();
	}
	public void actionPerformed(ActionEvent e){
		bewegen();
		figur_y = Sprung.sprungposition;
		repaint();
	}
	public void paint(Graphics g){	
		super.paint(g);
		Graphics2D f2 = (Graphics2D)g;
		if(getX_Bild() == 0 + (anzahl *50)){
			anzahl += 1;
			nx = 500;
		}
		if(getX_Bild() == 100 + (anzahl2 *100)){
			anzahl2 += 1;
			nx2 = 0;
		}
		if(getX_Bild() >= 100){
			f2.drawImage(img,200+nx,0,null);
		}
		f2.drawImage(img,480-nx2,0,null);
		if(blickrichtung <= 0){
			f2.drawImage(img2,left,figur_y,null);	
		}else{
			if(blickrichtung <= 0){
				f2.drawImage(img3,left,figur_y,null);
			}	
		}
	}
	private int getX_Bild() {
		return X_Bild;
	}
	public void bewegen(){
		if(lauf != -1){
			if(left + lauf <=40000){
				left += lauf;
			}else {
				X_Bild += lauf;
				nx += lauf;
				nx2 += lauf;
			}
		}else {
			if(left + lauf > -340){
				left += lauf;
				lauf = -1;
				}			
			}
		if(lauf != -1){		
			if(left - lauf > 700){
				lauf = -1;			
			}
		}
	}	
	private class AL extends KeyAdapter{
		public AL(){	
	}
	public void keyReleased(KeyEvent e){
		key = e.getKeyCode();
		if(key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT){
			lauf = 0;
			}
		}
	public void keyPressed(KeyEvent e){
		key = e.getKeyCode();
		if(key == KeyEvent.VK_RIGHT){
			lauf = 1;
			blickrichtung = 0;
			}
		if(key == KeyEvent.VK_LEFT){
			lauf = -1;
			blickrichtung = 1;
			}	
			if(key == KeyEvent.VK_SPACE){
				if(Sprung.fertig == true)
				Sprung();
			}
		}
	}		
	public void Sprung(){
		Sprung SprungAnimation = new Sprung();
		SprungAnimation.start();
	}
}
```


----------



## lord239123 (8. Apr 2015)

```
if(blickrichtung <= 0){
f2.drawImage(img2,left,figur_y,null);	
		}
else{
			if(blickrichtung <= 0){
				f2.drawImage(img3,left,figur_y,null);
			}	
		}
```

Der Code im else-Block der Methode paint kann nicht ausgeührt weden, da die Bedingung im if-Block vorher schon ausgeschlossen wurde.


----------



## Koti (8. Apr 2015)

lord239123 hat gesagt.:


> ```
> if(blickrichtung <= 0){
> f2.drawImage(img2,left,figur_y,null);
> }
> ...



Warum ausgeschlossen ? Durch das Else wird  doch geswitcht werden ???:L


----------



## lord239123 (8. Apr 2015)

Durch das else wird zwar geswitcht, allerdings hast du in deinem vom else-Block eingeschlossenen if-Block die gleiche Bedingung wie in deinem ersten if-Block.
Der Code geht nur in den else-Block über, wenn diese Bedingung false ergibt, also kann im else-Block nicht in den if-Block gewechselt werden, da die Bedingung dort immer false ergibt.

Also geht das Spiel zwar in den else Block, kann allerdings dort nicht in den if-Block.


----------



## Koti (8. Apr 2015)

lord239123 hat gesagt.:


> Durch das else wird zwar geswitcht, allerdings hast du in deinem vom else-Block eingeschlossenen if-Block die gleiche Bedingung wie in deinem ersten if-Block.
> Der Code geht nur in den else-Block über, wenn diese Bedingung false ergibt, also kann im else-Block nicht in den if-Block gewechselt werden, da die Bedingung dort immer false ergibt.
> 
> Also geht das Spiel zwar in den else Block, kann allerdings dort nicht in den if-Block.



Ich stelle mich wahrscheinlich dumm an, aber ich weiß nicht wie ich das lösen könnte


----------



## lord239123 (8. Apr 2015)

Du musst im ersten if-Block die Bedingung Blickrichtung == 0 und im zweiten if-Block die Bedingung Blickrichtung == 1 nehmen.
Das sollte dein Problem lösen.


----------



## Koti (8. Apr 2015)

lord239123 hat gesagt.:


> Du musst im ersten if-Block die Bedingung Blickrichtung == 0 und im zweiten if-Block die Bedingung Blickrichtung == 1 nehmen.
> Das sollte dein Problem lösen.



Wow, da hab ich mich wirklich ziemlich doof angestellt  danke !!


----------



## Koti (8. Apr 2015)

Ich habe jetzt das Problem das die Sprunganimation nicht ausgeführ wird, habe aber keine Fehler etc.

Code:

```
package frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.Timer;


public class gui extends JPanel implements ActionListener{
	
	int figur_y = 0;
	int blickrichtung;
	int sprungani;
	Timer time;
	Image img;
	Image img2;
	Image img3;
	Image img4;
	int X_Bild;
	int nx,nx2;
	int anzahl = 0;
	int anzahl2 = 0;
	int key;
	int lauf;
	int left = -200;
	int right = -200;
	
	public gui(){
		addKeyListener(new AL());
		nx = 0;
		nx2 = 480;
		key = 0;
		lauf = 0;
		setFocusable(true);
		ImageIcon u = new ImageIcon((getClass().getResource("Background.jpg")));
		img = u.getImage();
		ImageIcon c1 = new ImageIcon((getClass().getResource("Character 1.png"))); //GUCKT NACH RECHTS
		img2 = c1.getImage();
		ImageIcon c2 = new ImageIcon((getClass().getResource("Character 2.png"))); //GUCKT NACH LINKS
		img3 = c2.getImage();
		ImageIcon c3 = new ImageIcon((getClass().getResource("Charactersprung.png"))); //SPRUNG
		img4 = c3.getImage();
		time = new Timer(5,this);
		time.start();
		Sprung sprung = new Sprung();
	}
	public void actionPerformed(ActionEvent e){
		bewegen();
		figur_y = Sprung.sprungposition;
		repaint();
	}
	public void paint(Graphics g){	
		super.paint(g);
		Graphics2D f2 = (Graphics2D)g;
		if(getX_Bild() == 0 + (anzahl *50)){
			anzahl += 1;
			nx = 500;
		}
		if(getX_Bild() == 100 + (anzahl2 *100)){
			anzahl2 += 1;
			nx2 = 0;
		}
		if(getX_Bild() >= 100){
			f2.drawImage(img,200+nx,0,null);
		}
		f2.drawImage(img,480-nx2,0,null);
		if(blickrichtung <= 0 ){
				f2.drawImage(img2,left,figur_y,null);	
			}else{
				if(blickrichtung >= 0 ){
					f2.drawImage(img3,left,figur_y,null);	
				}else{
					if(sprungani >= 0 ){
						f2.drawImage(img4,left,figur_y,null);
					}
			}	
		}
	}
	private int getX_Bild() {
		return X_Bild;
	}
	public void bewegen(){
		if(lauf != -1){
			if(left + lauf <=40000){
				left += lauf;
			}else {
				X_Bild += lauf;
				nx += lauf;
				nx2 += lauf;
			}
		}else {
			if(left + lauf > -340){
				left += lauf;
				lauf = -1;
				}			
			}
		if(lauf != -1){		
			if(left - lauf > 700){
				lauf = -1;			
			}
		}
	}	
	private class AL extends KeyAdapter{
		public AL(){	
	}
	public void keyReleased(KeyEvent e){
		key = e.getKeyCode();
		if(key == KeyEvent.VK_LEFT || key == KeyEvent.VK_RIGHT){
			lauf = 0;
			}
		}
	public void keyPressed(KeyEvent e){
		key = e.getKeyCode();
		if(key == KeyEvent.VK_RIGHT){
			lauf = 1;
			blickrichtung = 0;
			sprungani = 0;
			}
		if(key == KeyEvent.VK_LEFT){
			lauf = -1;
			blickrichtung = 1;
			sprungani = 0;
			}	
			if(key == KeyEvent.VK_SPACE){
				if(Sprung.fertig == true)
				Sprung();
				sprungani = 1;
			}
		}
	}		
	public void Sprung(){
		Sprung SprungAnimation = new Sprung();
		SprungAnimation.start();
	}
}
```


----------



## Diabolus (8. Apr 2015)

Dafür müsstest du uns den Code der Sprung Klasse zeigen!


----------



## Koti (8. Apr 2015)

Diabolus hat gesagt.:


> Dafür müsstest du uns den Code der Sprung Klasse zeigen!



In der Sprung klasse ist nur der Sprung programmiert, die Animation ist in dem Was ich gepostet habe, nur es funktioniert nunmal nicht


----------



## Diabolus (9. Apr 2015)

Hallo Koti,

so wie der code im moment aussieht wird das programm nie in den else teil in zeile 77 kommen, weil alle bedingungen davor abgefangen werden!

Vorschlag:
ändere die bedingung in zeile 75 doch mal in 'sprungani == 0'


----------

