# Java Bild bewegen funktioniert nicht



## DerMagier (31. Jul 2018)

Ich wollte eine Art RPG Spiel programmieren allerdings hänge ich bei bewegen des Charakters fest. Ich hab schon im Internet geguckt gesucht aber nichts gefunden. Ich poste hier mal alles was relevant sein könnte. Danke schon mal 


```
public class KeyHandler implements KeyListener {
    Var v = new Var();
   

    @Override
    public void keyPressed(KeyEvent e) {
   
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            v.up = true;
            System.out.println("Oben");
        }
        if(e.getKeyCode() == KeyEvent.VK_DOWN) {
            v.down = true;
            System.out.println("Unten");
        }
        if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
            v.right = true;
            System.out.println("rechts");
        }
        if(e.getKeyCode() == KeyEvent.VK_LEFT) {
            v.left = true;
            System.out.println("links");
        }

    }



    @Override
    public void keyReleased(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_UP) {
            v.up = false;
            System.out.println("losgelassen");
        }
        if(e.getKeyCode() == KeyEvent.VK_DOWN) {
            v.down = false;
            System.out.println("losgelassen");
        }
        if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
            v.right = false;
            System.out.println("losgelassen");
        }
        if(e.getKeyCode() == KeyEvent.VK_LEFT) {
            v.left = false;
            System.out.println("losgelassen");
        }
    }
```


```
public class Movement {
Timer movement;
    public Movement() {
        movement = new Timer();
        movement.scheduleAtFixedRate(new TimerTask() {
            Var v = new Var();
            @Override
            public void run() {
               
                if(v.up == true) {
                
                    
                    v.y += 2;
           
                }
                else  if(v.down == true) {
                    
                    v.y -= 2;
                
                    
                }
                else if(v.left == true) {
                    v.x -= 2;
                   
                }
                 if(v.right== true) {
                    v.x += 2;
                    
                }
               
            }
        }, 0, 6);
    }

}
```


```
public class Draw extends JLabel {
    Var load = new Var();
    protected void paintComponent(Graphics p) {
        super.paintComponent(p);
        Var v =  new Var();
        Graphics2D g2d = (Graphics2D) p;
       
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        p.drawImage(load.map, 0,0,640,640,null);
        p.drawImage(load.held, v.x, v.y, 64, 64, null);
        repaint();

}}
```


----------



## fhoffmann (31. Jul 2018)

Du hast

```
Var v = new Var();
```
sowohl in deiner Klasse KeyHandler als auch in deiner Klasse Movement stehen.
Das sind zwei unterschiedliche Instanzen, die nichts voneinander wissen. Eine Änderung in der einen Instanz ist in der anderen Instanz nicht sichtbar.


----------



## DerMagier (31. Jul 2018)

fhoffmann hat gesagt.:


> Du hast
> 
> ```
> Var v = new Var();
> ...


Vielen Dank das klappt schon mal aber das Bild wird nicht verschoben weisst du woran das liegen könnte? Ich hab die KeyHandler Klasse und die Movement Klasse zusammengelgt


----------



## fhoffmann (31. Jul 2018)

Und in der Klasse Draw erzeugst du bei jedem Aufruf von paintComponent eine neue Instanz von Var.


----------



## DerMagier (31. Jul 2018)

fhoffmann hat gesagt.:


> Und in der Klasse Draw erzeugst du bei jedem Aufruf von paintComponent eine neue Instanz von Var.


Tut mir leid das ich nochmal störe aber wie muss ich das genau machen


----------



## fhoffmann (31. Jul 2018)

Vielleicht solltest du erst einmal die Grundlagen lernen: Was ist der Unterschied zwischen einer Klasse, einer Instanz einer Klasse und einer Referenz auf eine Instanz einer Klasse.


----------



## JuKu (5. Aug 2018)

Und wenn du dann etwas weiter bist:
AWT / Swing ist eine *GUI* "Library", aber nichts für die Spieleentwicklung!
Hier kann ich dir libGDX empfehlen.


----------



## Javinner (5. Aug 2018)

@JuKu 
Aber ein 2D-Spiel lässt sich trotzdem realisieren  Ich kenne libDGX jetzt nicht, aber zu behaupten, dass Swing nichts! für Spieleentwicklung ist, ist meiner Meinung nach nicht ganz richtig. Mit Kreativität und Wissen bewaffnet, lässt sich doch schon einiges mit Swing erstellen. 

@DerMagier 
Ohne Grundlagen wirst du deinem Nick nie gerecht


----------



## JuKu (6. Aug 2018)

@Javinner Ja, man kann auch eine GUI dafür "missbrauchen", indem man einen Timer nicht, der alle x ms die Update Methode aufruft, diese wiederum repaint() anstößt, womit Swing dann irgendwann mal den Canvas neu drawt.
Aber dafür ist eine GUI einfach nicht gedacht, für Gameloops gibts Game Libraries / Engines.
Man kann mit Swing Spiele entwickeln, aber für Spiele mit Gameloop sollte man das eher nicht tun (vorallem nicht, wenn er ein RPG plant!).


----------

