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.
Danke für jede art von Antwort.
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.