Hallo,
Folgendes Programm:
Wieso passiert nichts wenn ich das w,a,s,d drücke?
Finde den Fehler nicht ...
Danke Luk
Folgendes Programm:
Java:
public class GamePanel extends JPanel implements Runnable, KeyListener {
private boolean game_running;
private long delta = 0;
private long last = 0;
private long fps = 0;
private boolean up;
private boolean down;
private boolean left;
private boolean right;
private double speed;
ArrayList<Grafiken> bilder;
Grafiken grafik;
public static void main (String[] args) {
new GamePanel(600, 400);
}
public GamePanel (int w, int h) {
game_running = true;
speed = 50.0;
//GUI-Einrichten
this.setPreferredSize(new Dimension(w, h));
JFrame frame = new JFrame("CellSim");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(this);
frame.add(this);
frame.pack();
initialisieren();
frame.setVisible(true);
}
private void initialisieren () {
last = System.nanoTime();
bilder = new ArrayList<Grafiken>();
BufferedImage[] cell = this.loadPics("F:/Pics/greenCell_1.png", 4);
grafik = new Grafiken (cell, 200, 150, 100, this);
bilder.add(grafik);
Thread t = new Thread(this);
t.start();
}
public void run () {
while (game_running) {
doTime();
checkKeys();
doLogic();
moveObjects();
repaint();
try {
Thread.sleep(10);
} catch (Exception ex) { }
}
}
private void doTime () {
delta = System.nanoTime() - last;
last = System.nanoTime ();
fps = ((long) 1e9)/delta;
}
@Override
public void paintComponent (Graphics g) {
super.paintComponent(g);
g.setColor(Color.blue);
g.drawString("FPS: " + Long.toString(fps), 0, 10);
if (bilder != null) {
for (Drawable draw : bilder) {
draw.drawObjects(g);
}
}
}
public void doLogic () {
for (Moveable mov : bilder) {
mov.doLogic(delta);
}
}
public void moveObjects () {
for (Moveable mov : bilder) {
mov.move(delta);
}
}
private BufferedImage[] loadPics(String path, int pics) {
BufferedImage[] meineBilder = new BufferedImage[pics];
BufferedImage source = null;
URL pic_url = getClass().getClassLoader().getResource(path);
try {
source = ImageIO.read(new File(path));
} catch (Exception ex) { }
for (int x = 0; x < pics; x++) {
meineBilder[x] = source.getSubimage(x*source.getWidth()/pics, 0,
source.getWidth()/pics, source.getHeight());
}
return meineBilder;
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W) {
up = true;
System.out.println("Pressed up");
}
if (e.getKeyCode() == KeyEvent.VK_S) {
down = true;
}
if (e.getKeyCode() == KeyEvent.VK_A) {
left = true;
}
if (e.getKeyCode() == KeyEvent.VK_D) {
right = true;
}
}
public void keyReleased (KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W) {
up = false;
}
if (e.getKeyCode() == KeyEvent.VK_S) {
down = false;
}
if (e.getKeyCode() == KeyEvent.VK_A) {
left = false;
}
if (e.getKeyCode() == KeyEvent.VK_D) {
right = false;
}
}
public void keyTyped (KeyEvent e) {
}
private void checkKeys () {
if (up) {
grafik.setdx(-speed);
}
if (down) {
grafik.setdx(speed);
}
if (right) {
grafik.setdy(speed);
}
if (left) {
grafik.setdy(-speed);
}
if (!up && !down) {
grafik.setdx(0);
}
if (!left && !right) {
grafik.setdy(-speed);
}
}
}
Java:
public class Grafiken extends Rectangle2D.Double implements Drawable, Moveable {
private long verzoegerung;
private long animation;
private int aktuellesPic;
protected double dx;
protected double dy;
GamePanel panel;
BufferedImage[] pics;
public Grafiken (BufferedImage[] i, double x, double y, long verzoegerung, GamePanel p) {
pics = i;
this.x = x;
this.y = y;
this.verzoegerung = verzoegerung;
this.width = pics[0].getWidth();
this.height = pics[0].getHeight();
panel = p;
}
public void drawObjects (Graphics g) {
g.drawImage(pics[aktuellesPic], (int) x, (int) y, null);
}
public void doLogic (long delta) {
animation += (delta/1000000);
if (animation > verzoegerung) {
animation = 0;
doAnimation();
}
}
public void move (long delta) {
if (dx != 0) {
x += dx*(delta/1e9);
}
if (dy != 0) {
x =+ dy*(delta/1e9);
}
//System.out.println("Did move");
}
private void doAnimation () {
aktuellesPic++;
if (aktuellesPic >= pics.length) {
aktuellesPic = 0;
}
}
public void setdx (double d) {
dx = d;
//System.out.println("Set up");
}
public void setdy (double d) {
dy = d;
}
public double getdx () {
return dx;
}
public double getdy () {
return dy;
}
}
Wieso passiert nichts wenn ich das w,a,s,d drücke?
Finde den Fehler nicht ...
Danke Luk