# MouseEvent.getPint() ist nicht Courser Spitze



## Skanky (7. Jan 2012)

Guten Abend Nachtschwärmer 

Ich baue mir gerade ein kleines RTS zusammen, dabei benutze ich 
	
	
	
	





```
MouseEvent.getPoint()
```
 um Einheiten aus zu wählen.

Meine Einheiten erben von Rectangle2D.Double und das ganze sieht wie folgt aus: 

```
@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 
	
	
	
	





```
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


----------



## Schandro (7. Jan 2012)

haben die Rectangles und das Component an dem der MouseMotionLister hängt denselben 0|0 Bezungspunkt?


----------



## Skanky (7. Jan 2012)

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:

```
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


----------



## Schandro (7. Jan 2012)

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.


----------



## Skanky (7. Jan 2012)

Ah okay... danke

*Kopf kollidiert mit Tisch*

Habs gefixt!

Danke, danke, danke


----------

