Hallo zusammen,
ich habe das Problem das ein getter nur den Ausgangswerte aus dem Constructor, und nicht durch Tastendrücke geänderten Werte ausgibt.
Ich habe mehrere Klassen:
1. eine für den Keylistener
2. eine Player Klasse
3. die Klasse für Gameloop
Bei einem Tastendruck soll in der Player-Klasse eine X oder Y-Position geändert werden.
Dazu habe ich in der Playerklasse die Funktion move().
In der move-Funktion habe ich ein System.out das direkt die neuen Werte ausgibt, was auch korrekt funktioniert!
Wenn ich aber nun aus meiner Gameloop mit player.getX() versuche die Werte zu holen dann bekomme ich nur die unveränderten Ausgangswerte (50/50).
Es ist jedoch behoben wenn ich die X/Y Variablen static mache.
Ist es ein Problem wenn ich aus mehreren Klassen die Klasse Player initialisiere?
Keylistener:
Player:
Gameloop:
ich habe das Problem das ein getter nur den Ausgangswerte aus dem Constructor, und nicht durch Tastendrücke geänderten Werte ausgibt.
Ich habe mehrere Klassen:
1. eine für den Keylistener
2. eine Player Klasse
3. die Klasse für Gameloop
Bei einem Tastendruck soll in der Player-Klasse eine X oder Y-Position geändert werden.
Dazu habe ich in der Playerklasse die Funktion move().
In der move-Funktion habe ich ein System.out das direkt die neuen Werte ausgibt, was auch korrekt funktioniert!
Wenn ich aber nun aus meiner Gameloop mit player.getX() versuche die Werte zu holen dann bekomme ich nur die unveränderten Ausgangswerte (50/50).
Es ist jedoch behoben wenn ich die X/Y Variablen static mache.
Ist es ein Problem wenn ich aus mehreren Klassen die Klasse Player initialisiere?
Keylistener:
Java:
public class Keylistener implements KeyListener
{
private boolean left,right,up,down;
Player player = new Player();
private char taste;
public Keylistener()
{
}
public void keyPressed(KeyEvent e)
{
taste = e.getKeyChar();
System.out.println(taste);
if(taste == 'a')
{
left = true;
move();
}
if(taste == 'd')
{
right = true;
}
//......usw für wasd
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
taste = e.getKeyChar();
if(taste == 'a')
{
left = false;
move();
}
if(taste == 'd')
{
right = false;
}
//...usw für wasd
}
public void move()
{
if (left)
{
player.move(-10,-10);
}
if (right)
{
player.move(10,0);
}
//...usw für left/right/up/down
}
...
Player:
Java:
public class Player
{
private int posX;
private int posY;
public Player()
{
posX = 50;
posY = 50;
}
synchronized int getX()
{
return this.posX;
}
synchronized int getY()
{
return this.posY;
}
public void move(int x, int y)
{
posX += x;
posY += y;
System.out.println("Neue X-Position:" +posX +" Y-Position:" +posY); // Hier werden die geänderten Werte korrekt angezeigt!
}
}
Gameloop:
Java:
public class Hintergrund extends JPanel implements Runnable, ActionListener
{
Thread t1 = new Thread(this);
public Player player = new Player();
public Hintergrund()
{
t1.start();
}
public void run()
{
while (true)
{
repaint();
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
public void paint(Graphics g)
{
super.paint(g);
g.drawRect(player.getX(), player.getY(), 10, 10); // Hier bekomme ich immer die Werte 50 50, auch wenn sie eigentlich geändert sein müssten!
}
public void actionPerformed(ActionEvent arg0)
{
}
}
Zuletzt bearbeitet: