MouseEvent.getPint() ist nicht Courser Spitze

Skanky

Mitglied
Guten Abend Nachtschwärmer 😀

Ich baue mir gerade ein kleines RTS zusammen, dabei benutze ich
Code:
MouseEvent.getPoint()
um Einheiten aus zu wählen.

Meine Einheiten erben von Rectangle2D.Double und das ganze sieht wie folgt aus:
Java:
@Override
public void mouseMoved(MouseEvent e) {
		for (Iterator<Sprite> it = actors.iterator(); it.hasNext();) {
			Sprite r = it.next();
			if (r instanceof Unit) {
				Unit unit = (Unit) r;
				if (unit.contains(e.getPoint())) {
					unit.setMouseOver(true);
					break;
				} else {
					unit.setMouseOver(false);
				}
			}
		}
	}
}

Jetzt bin ich immer davon ausgegangen, dass getPoint() die Spitze des Coursers ist... oder zu mindestens der obere Bereich aber ich habe mich da wohl getäuscht. Der Bereich, ab dem
Code:
unit.contains(e.getPoint())
anfängt zu reagieren liegt ungefähr bei einem Bereich, der um die Hälfte des Rectangle2D nach oben verschoben wurde. (Rectangle2D - (Rectangle2D / 2)) <-- jeweils in der X sowie der Y Achse.

Woher kommt das?
Kann ich außer gegenrechnen etwas machen?

Oder liegt es vielleicht am Code?
Prinzipiell habe ich meine Programm auf der Grundlage von dem Wirklich guten Tutorial von Quaxli entwickelt.

Ich bin für jeden Tipp dankbar 😀
Grüße Skanky
 
Ja sie beziehen sich auf das selbe JPanel.

Ich habe mir mal die Courser Position ausgeben lassen. Die 0|0 Koordinate ist bei der Maus 0|30, und wenn ich mit Robot die Maus auf 0|0 setze, liegt der Cursor ganz normal an der 0|0 Koordinate, gebe ich mir diese aber aus (e.getPoint()) bekomme ich als Koordinaten 8|30. es sieht so aus als wenn er von der Unteren kante des Cursorbildes ausgeht.

Die Rechtangle2D Objekte verhalten sich hingegen Normal und werden auch an den gewünschten Positionen gezeichnet.

Dem MouseMotionLister adde ich wie alles andere auch bei der Frame Erstellung:
Java:
frame = new JFrame("New GameDemo");
frame.setLocation(100, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.addKeyListener(this);
frame.addMouseListener(this);
frame.addMouseMotionListener(this);
frame.pack();
frame.setVisible(true);

Ich bin ehrlich gesagt ein wenig verwundert, woher diese Abweichung kommt.

Grüße und danke,
Skanky
 
Zuletzt bearbeitet:
Ich hatte Recht, sie beziehen sich NICHT auf das selbe. Der MouseMotionListener hat als Bezugspunkt die linke obere Kante inklusive Fensterrahmen, bei den Rectangles wird der Fensterrahmen ignoriert.
 

Zurück
Oben