Probleme mit objekt initializirung mit Mouselistener

DERASTAT

Mitglied
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
Java:
//(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:

Java:
//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:
Java:
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
 
Kann es vllt. daran liegen, dass du in dem Konstruktor
Code:
this.mouseinput = mouseinput
geschrieben hast, anstatt
Code:
this.mouseinput = m
, was du als Argument dem Konstruktor übergibst?
 
Kann es vllt. daran liegen, dass du in dem Konstruktor
Code:
this.mouseinput = mouseinput
geschrieben hast, anstatt
Code:
this.mouseinput = m
, was du als Argument dem Konstruktor übergibst?
Danke es war eher so dass es statt "m" mouseinput heissen soll und die konstruktoren sind jetzt so:

Java:
mouseinput = new MouseInput(p);
        p = new Player(200, 200 ,this, mouseinput);
        addMouseListener(new MouseInput(p));
Es funktioniert jetzt gerade😛opcorn:
 
Ist es nicht sinnvolelr, anstatt

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

folgendes zu schreiben:

Java:
  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);
 
Ist es nicht sinnvolelr, anstatt

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

folgendes zu schreiben:

Java:
  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);

Ja so iist es besser aber irgendwie ist in Player deltaMousePlayerX immernoch null und in MosueInput die corodinatenunterschiede zwischen Maus und spieler:rtfm:
 
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.
 
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!
 
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
 

Zurück
Oben