# bewegen eines Objektes



## mankingwwe (26. Mai 2015)

Ich habe folgendes Spielfeld --> siehe Bild im Anhang.

Ich will nun, dass man diese zwei Balken hoch und runter steuern kann.
Jedoch weiß ich nicht genau, wie ich das anstellen kann. Habe schon was von einem KeyListener gelesen, aber wie soll ich denn den nun nutzen? Soll ich schreiben, dass er die Koordinaten A_Y und B_Y ändern soll, wenn ich eine der Pfeiltasten drücke? 

[Java] protected void paintComponent( Graphics g){
    int ha = A_Y;
    int hb = B_Y; 

    g.drawRect(20,20,50,150);  
    g.drawRect(1600,20,50,A_Y);
    g.fillRect(1600,20,50,B_Y);
    g.fillRect(20,20,50,150);
  }

 [/Java]

Habe das mal mit einem Button versucht, jedoch aktualisiert sich die Zeichnung nicht.
Wäre sehr dankbar, wenn jemand die Zeit finden würde, mal einen der Balken , so zu verändern, dass ich ihn auf der y-Achse hoch und runter schieben kann.

[Java]package game;
import javax.swing.*;
import java.util.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.*;

public class Spiel extends JPanel 
{
  JFrame fenster;

  int A_Y = 150; // Höhenregler Spieler A
  int B_Y = 150; // Höhenregler Spieler B


  Spiel()
  { fenster = new JFrame();
    fenster.add(this);            
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    fenster.setExtendedState(JFrame.MAXIMIZED_BOTH);       
    fenster.pack();
    fenster.setBackground(Color.yellow);   
    fenster.setVisible(true);
  }


  protected void paintComponent( Graphics g){
    int ha = A_Y;
    int hb = B_Y; 

    g.drawRect(20,20,50,150);  
    g.drawRect(1600,20,50,ha);
    g.fillRect(1600,20,50,hb);
    g.fillRect(20,20,50,150);
  }

  [/Java]

[Java]package game;
import javax.swing.*;
import java.util.*;
import java.awt.*;
public class Mainmethode extends Spiel
{
  public static void main(String[] args)
  {      
    new Spiel();












  }       
} [/Java]


----------



## Luecx (26. Mai 2015)

als erstes rufst du bei paintComponent(Graphics g) immer g.clearRect(0,0,this.getWidth(),this.getHeight()) auf,
Es ist sinnvoll ein neues Objekt Balken zu machen wo du jeweil die X und Y Werte verändern kannst, und bei der Veränderung der x und y werte, wird in dem Frame, Panel, was auch immer( wo du die Balken drinne hast) die Methode (repaint) aufgerufen, in der Methode paintComponent fügst du dann die Methode(balken1.draw(g), balken2.draw(g)) hinzu und in der Klasse Balken dann noch:
public void draw(Graphics g){
   g.drawRect(x,y,20,100);   // 20 und 100 sind hier jetzt die Breite und Höhe.
}

mfg


----------



## Java20134 (27. Mai 2015)

Bewegen kannst du die Balken, wenn du die Werte änderst. Dazu kannst du den KeyListener in dem JPanel implementieren. Danach kannst du eine Verzweigung machen:

```
if(arg0.getKeyCode() == KeyEvent.VK_UP){ //arg0 ist das KeyEvent
     wert -= 5; //wert ist zum Beipsiel der y Wert des Spielers  
}
```
Wenn wie in diesem Beispiel die Pfeiltaste nach oben gedrückt wird, so soll etwas geschehen (Bewegung des Spielers). 

Du könntest dir mal das Thema Thread angucken. So könntest du in der run Methode in einer while Schleife die draw oder paint Methode aufrufen, sodass das Spiel immer wieder neu gezeichnet wird. Der Vorteil ist, dass Prozesse parallel laufen können und das Programm nicht so extrem ruckelt.


----------

