# Probleme mit objekt initializirung mit Mouselistener



## DERASTAT (16. Nov 2013)

Ich programmiere grad ein Spiel Wo die Steuerung so funktionieren soll, du klickst auf den Blidschrim und der Spieler lüuft dann dahin so wie bei warcraft, lol, Dota ...

Dafur will ich einen MosueLlistener erstellen, der den Abstand zwischen Maus und spieler ausgiebt

```
//(public class MouseInput implements java.awt.event.MouseListener)
private Player p;
    
    public MouseInput(Player p){
        this.p = p;
        
    }
  
    public void mouseClicked(MouseEvent e) {
        x=e.getX();
        y=e.getY();

        if(p != null){
            deltaMousePlayerX= (p.getX()- x); // Hier wird der Abstand erechnet
            deltaMousePlayerY= (p.getY() - y);
           
            System.out.println(deltaMousePlayerX+","+deltaMousePlayerY); // und hier Ausgegeben
        }
    }
```
Soweit so gut
jetzt soll eine andere Classe Player daruf zugreifen:


```
//class Player

private MouseInput mouseinput;

public Player (double x, double y, Biotopwar2D biotopwar2d, MouseInput m){
    
        this.x = x;
        this.y = y;
        this.mouseinput = mouseinput;
        
        SpriteSheet ss = new SpriteSheet(biotopwar2d.getSpriteSheet());
        
        player = ss.grabImage(1, 1, 32, 32);
        
    }

public void tick(){
        
        if(mouseinput !=null)
            System.out.println("WORKING");  // hier wird nix ausgegeben es scheint als wird das falsche 
                                                        // angesprochen werden?
    }
```
Und genau hier wid nix ausgegeben. hier wird alles initializiert:

```
p = new Player(200, 200 ,this, mouseinput);
        addMouseListener(new MouseInput(p));
```


Ich hab nur zu besseren lesbarkeit den code-part gezeigt wo ich glaube, dass er relevant ist.

Danke an alle die es sich bis hierhin durchgelesen haben. Danke


----------



## eMmiE (16. Nov 2013)

Wenn du tick() nicht aufrufst, dann passiert auch nichts


----------



## DERASTAT (16. Nov 2013)

eMmiE hat gesagt.:


> Wenn du tick() nicht aufrufst, dann passiert auch nichts



Tick wird 60 mal die sekunde aufgerufen. Ja das war unklar mit den parts ide ich gezeigt hab.
Ich hab auch schon die tick() ausprobiert und sie funktioniert.


----------



## eMmiE (18. Nov 2013)

Kann es vllt. daran liegen, dass du in dem Konstruktor 
	
	
	
	





```
this.mouseinput = mouseinput
```
 geschrieben hast, anstatt 
	
	
	
	





```
this.mouseinput = m
```
, was du als Argument dem Konstruktor übergibst?


----------



## DERASTAT (18. Nov 2013)

eMmiE hat gesagt.:


> Kann es vllt. daran liegen, dass du in dem Konstruktor
> 
> 
> 
> ...


Danke es war eher so dass es statt "m" mouseinput heissen soll und die konstruktoren sind jetzt so:


```
mouseinput = new MouseInput(p);
        p = new Player(200, 200 ,this, mouseinput);
        addMouseListener(new MouseInput(p));
```
Es funktioniert jetzt geradeopcorn:


----------



## BuddaKaeks (24. Nov 2013)

Ist es nicht sinnvolelr, anstatt


```
mouseinput = new MouseInput(p);
            p = new Player(200, 200 ,this, mouseinput);
            addMouseListener(new MouseInput(p));
```

folgendes zu schreiben:


```
mouseinput = new MouseInput(p); // Hier wird der Mous Input übrigens mit p=null erzeugt, kann das sein?
            p = new Player(200, 200 ,this, mouseinput);
            addMouseListener(mouseinput);
```


----------



## DERASTAT (25. Nov 2013)

BuddaKaeks hat gesagt.:


> Ist es nicht sinnvolelr, anstatt
> 
> 
> ```
> ...



Ja so iist es besser aber irgendwie ist in Player deltaMousePlayerX immernoch null und in MosueInput die corodinatenunterschiede zwischen Maus und spieler:rtfm:


----------



## rarup (26. Nov 2013)

Also wenn ich das richtig vermute anhand Deiner Codeschnippsel liefert Player.getX/Y() die Koordinaten der Maus? Oder wo kommen die her? 
Falls meine Annahme richtig ist muss "deltaMousePlayerX immernoch null und in MosueInput die corodinatenunterschiede zwischen Maus und spieler" natürlich immer der Fall sein.


----------



## DERASTAT (25. Dez 2013)

bitte lösch mich


----------



## DERASTAT (25. Dez 2013)

rarup hat gesagt.:


> Also wenn ich das richtig vermute anhand Deiner Codeschnippsel liefert Player.getX/Y() die Koordinaten der Maus? Oder wo kommen die her?
> Falls meine Annahme richtig ist muss "deltaMousePlayerX immernoch null und in MosueInput die corodinatenunterschiede zwischen Maus und spieler" natürlich immer der Fall sein.



Es ist irgendein deklarier oder initialisier oder ZugriffsFehler kann sich irgendjemand bereiterklären mal eine kleine Skype Konforenz machen.versuche ich es zu lösen!

PS: Ja ich hatt eine Frustpause nun, versuche ich es zu lösen!


----------



## eMmiE (26. Dez 2013)

Um das zu Lösen, brauchen wir einfach die Methode Player.getX()/getY() und die anderen genannten Klassen. Könntest du das Wichtigste nochmal zusammenfassen und reinstellen?

Gruß eMmiE


----------

