Mausrahmen mit offset

Eichelhäer

Bekanntes Mitglied
Hallo,

ich bin dabei einen einfachen Mausrahmen wie man ihn z.B. aus windows kennt mit einem rectangle auf einem JPanel zu zeichnen. Nun mache ich ein kleines 2d spiel mit einer scrollbaren spielwelt. Meinen Mausrahmen erzeuge ich wie folgt:

Java:
int x = Math.min(fantasyGame.mouseScreenLeft.x,fantasyGame.mouseScreenDrag.x);
int y = Math.min(fantasyGame.mouseScreenLeft.y,fantasyGame.mouseScreenDrag.y);
int w = Math.abs(fantasyGame.mouseScreenDrag.x-fantasyGame.mouseScreenLeft.x);
int h = Math.abs(fantasyGame.mouseScreenDrag.y-fantasyGame.mouseScreenLeft.y);
                    
mouseBox = new Rectangle(x,y,w,h);

Meine Camera wird pixelweise einfach durch hoch/runterzählen eines integers bewegt und spiel natürlich bei der richtigen positionierung des Mausrahmens auf dem Bildschirm eine Rolle.

Ich habe mittlerweile wirklich viele Möglichkeiten durchprobiert mit dem ergebnis, dass ich es einerseits schaffe die mouseBox überall zu zeichnen allerdings nicht mehr wenn ich scrolle oder andererseits die mouseBox beim scrollen zu vergrößern aber die mouseBox nach loslassen der taste an beliebiger stelle erneut zu zeichen, d.h. der offset ist verschoben und die mouseBox wird falsch gerendert. Nun möchte ich erreichen, dass ich eine "scrollbare Mousebox" habe um große teile der map zu umranden und das andererseits von überall aus auf der map.

Wäre für Hilfe sehr sehr dankbar.
 
G

Gelöschtes Mitglied 76266

Gast
einem rectangle auf einem JPanel
addMouseListener to JPanel and from the MouseEvent you could get the rectangle as following: From the mouseRealeased (or mouseClicked) you retrieve the coordinates x/y, for the left upper corner with the first click and the second click for right lower corner. The difference between x0 and x1 gives one side length, and the difference of y0 and y1 gives the other length.
 

Eichelhäer

Bekanntes Mitglied
Ja, ich habe ja den Mausrahmen das ist nicht das Problem. Das funktioniert ja. Das Problem ist der offset. Wenn ich meine Camera mit mousedrag verschiebe (alles in ScreenSpace), dann kann ich zwar ein Rechteck zeichnen über die ganze Map, aber wenn ich dann erneut einen Rahmen zeichnen möchte stimmen halt die Koordinaten nicht mehr. Es geht halt entweder nur das eine oder das andere.
 

mihe7

Top Contributor
Ich komme zwar bei der Beschreibung nicht ganz mit, aber grundsätzlich ist es doch so, dass Du zwei Koordinatensysteme hast: einmal das der Map und einmal das der Komponente, die einen Ausschnitt der Map anzeigt.

D. h. (0,0) der Komponente entspricht einem vom Ursprung der Map ggf. verschiedenen Punkt (xOffset, yOffset) in der Map.

Die Koordinate der Mausereignisse sind bezogen auf die linke, obere Ecke der Komponente, Du musst also nur xOffset und yOffset zur Koordinate addieren, um die Map-Koordinate zu erhalten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R text offset versus JTextComponent caret position AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben