KeyListener + Animation

Piscary

Mitglied
Hallo Forum!
Ich beschäftige mich erst seit ein paar Wochen mit Java und habe sonst keinerlei Programmiererfahrung. Jedenfalls hatte ich vor, ein programm zu erstellen, das ein von mir gezeichnetes Bild durch Drücken der SPACE-Taste zuerst aufwärts und dann automatisch wider abwerts bis zum Ausgangspunkt bewegt.

Dazu habe ich vier Klassen erstellt: Main, Core, Sprite und ScreenManager.
Hier ist der Quelltext der Main und der Sprite Klasse von denen ich annehme, sie enthalten den Fehler.
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Main extends Core implements KeyListener {
	public static void main(String[] args){
		new Main().run();
	}
	
	//variables
	private String message ="";
	private Image i;
	private Sprite sprite;
	private ScreenManager s;
	private Image bg;
	
	//init method
	public void init(){
		super.init();
		
		bg = new ImageIcon("C:\\Users\\Stephan Mäder\\workspace\\Game\\src\\back.jpg").getImage();
		Image position1 = new ImageIcon("C:\\Users\\Stephan Mäder\\workspace\\Game\\src\\b.png").getImage();
		
		sprite = new Sprite(i);
		sprite.setI(position1);
		sprite.setX(230);
		sprite.setY(400 - sprite.getHeigth());
	}
	
	//draw the whole thing on screen
	public void draw(Graphics2D g){
		g.drawImage(bg,0,0,null);
		g.drawImage(sprite.getI(), Math.round(sprite.getX()), Math.round(sprite.getY()), null);
		g.drawString(message, 50, 50);
	}
	
	public void check(){
		if(sprite.getX() <= 0){
			sprite.setVelocityX(0);
			sprite.setMoving(false);
		}else if(sprite.getX() + sprite.getWidth() >= s.getWidth()){
			sprite.setVelocityX(0);
			sprite.setMoving(false);
		}
		
		if(sprite.getY() < 0){
			sprite.setVelocityY(0);
			sprite.setMoving(false);
		}else if(sprite.getY() + sprite.getHeigth() > 401){
			sprite.setVelocityY(0);
			sprite.setMoving(false);
		}
	}
	
	//key methods for user input
	public void keyPressed(KeyEvent event){
		try{
			int keyCode = event.getKeyCode();
			if(keyCode == KeyEvent.VK_ESCAPE){
				stop();
			}
		
			else if(keyCode == KeyEvent.VK_SPACE){
				sprite.setMoving(true);
				sprite.setVelocityY(-Math.abs(0.3f));
				
				if(sprite.getY() <= 200){
				sprite.setVelocityY(0.3f);
				}	
				sprite.move();
				check();
			}else{
				message = KeyEvent.getKeyText(keyCode) + " Key not valid";
				event.consume();
			}
		}catch(Exception ex){
			s.restoreScreen();
			System.out.println("Error 1");
		}
	}
	public void keyReleased(KeyEvent event){}
	public void keyTyped(KeyEvent event){}
}
Java:
import java.awt.Image;

public class Sprite {
	
	//variables
	private boolean moving;
	private Image i;
	private float x;
	private float y;
	private float vx;
	private float vy;
	
	//CUNSTRUCTOR
	public Sprite(Image i){
		this.i = i;
	}
	
	//change position
	public void move(){
		
		long startTime = System.currentTimeMillis();
		long cumTime = startTime;
		
		while (moving){
			long timePassed = System.currentTimeMillis() - cumTime;
			cumTime += timePassed;
					
			x += vx * timePassed;
			y += vy * timePassed;
			
			try{
				Thread.sleep(20);
			}catch(Exception ex){}
		}
	}
	
	//get x position
	public float getX(){
		return x;
	}
	
	//get x position
	public float getY(){
		return y;
	}
	
	//get sprite x position
	public void setX(float x){
		this.x = x;
	}
	
	//get sprite y position
	public void setY(float y){
		this.y = y;
	}
	
	//get sprite width
	public int getWidth(){
		return i.getWidth(null);
	}
	
	//get sprite height
	public int getHeigth(){
		return i.getHeight(null);
	}
	
	//get horizontal velocity
	public float getVelocityX(){
		return vx;
	}
	
	//get vertical velocity
	public float getVelocityY(){
		return vy;
	}
	
	//set horizontal velocity
	public void setVelocityX(float vx){
		this.vx = vx;
	}
	
	//set vertical velocity
	public void setVelocityY(float vy){
		this.vy = vy;
	}
	
	public void setI(Image i){
		this.i = i;	
	}
	
	public Image getI(){
		return i;
	}
	
	public void setMoving(boolean moving){
		this.moving = moving;
	}

}

Danke für jede art von Antwort.
 
😳Hab grad gesehn, dass ein ähnliches Thema bereits gepostet wurde... sorry für den Doppelpost. Falls jemand trotzdem antworten will wär ich immernoch dankbar😉
 

Zurück
Oben