FIguranimation bei Laufrichtungen ändern?!

Koti

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

Bekanntes Mitglied
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

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

Bekanntes Mitglied
Java:
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.
 
Zuletzt bearbeitet:

Koti

Mitglied
Java:
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.

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

lord239123

Bekanntes Mitglied
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.
 
Zuletzt bearbeitet:

Koti

Mitglied
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
 
Zuletzt bearbeitet:

lord239123

Bekanntes Mitglied
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

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

Code:
Java:
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

Aktives Mitglied
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'
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Minecraft Minecraft 1.12.2 Plotrand ändern Spiele- und Multimedia-Programmierung 1
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
M Wie kann man die Auflösung eine fertigen Programms ändern? Spiele- und Multimedia-Programmierung 1
J Unicode Font Größe ändern Spiele- und Multimedia-Programmierung 2
T Bilder einbinden, bzw. ändern Spiele- und Multimedia-Programmierung 5
F LWJGL: Textur ändern mit GL11.readPixels Spiele- und Multimedia-Programmierung 5
F Bewegungsrichtung ändern Spiele- und Multimedia-Programmierung 4
R Problem bei Farbe ändern/4Gewinnt Spiele- und Multimedia-Programmierung 5
B Bilder in GUI ändern ohne repaint() Spiele- und Multimedia-Programmierung 6
P Prozess Lautstärke ändern Spiele- und Multimedia-Programmierung 4
H BranchGroup ändern Spiele- und Multimedia-Programmierung 4
U Value in Programm ändern? Spiele- und Multimedia-Programmierung 5
aze Java3d:Helligkeit von Shape3D ändern Spiele- und Multimedia-Programmierung 2
M Variable die eine Klasse enthält ändern Problem Spiele- und Multimedia-Programmierung 16
truesoul Picking und Farbe ändern Spiele- und Multimedia-Programmierung 3
R Nachträgliches ändern von Vertex Arrays. Wie geht das? Spiele- und Multimedia-Programmierung 3
F Farbe ändern bei Überlappung Spiele- und Multimedia-Programmierung 2
U Canvas Ursprung ändern Spiele- und Multimedia-Programmierung 11
E Durch Klick auf den JButton will ich die Farbe ändern? Spiele- und Multimedia-Programmierung 8
DEvent [2D] Farbe bestimmten Pixels eines Bildes ändern Spiele- und Multimedia-Programmierung 3
S Dimensionen/Maßstab des J3D universe ändern Spiele- und Multimedia-Programmierung 8
U JPG in größe ändern und speichern Spiele- und Multimedia-Programmierung 3
N Bild im Panel ändern Spiele- und Multimedia-Programmierung 3
C Text in/auf Text2D ändern Spiele- und Multimedia-Programmierung 4
I Kameraposition in Java3d ändern Spiele- und Multimedia-Programmierung 13

Ähnliche Java Themen

Neue Themen


Oben