Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MrBarsack

Frischling

  • »MrBarsack« ist der Autor dieses Themas

Beiträge: 65

Wohnort: NRW

Beruf: Student

  • Private Nachricht senden

1

06.10.2012, 18:43

Objekte über Maus anklicken

Guten Abend,

Ich habe aktuell ein Problem mit der Maus.
Mein Ziel ist es, ein Boolean auf "true" zu setzten, sobald das bestimmte Objekt angeklickt wurde.

Aktuell habe ich folgenden Code:

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public boolean angeklickt()
    {
        if(Mouse.isButtonDown(0))
        {
          if(MausInput.getX() > Position.x && MausInput.getX() < Position.x + Größe.Breite)
          {
              if(MausInput.getY() > Position.y && MausInput.getY() < Position.y + Größe.Hoehe)
              {
                  return true;
              }
          }
        }
        return false;
    }


Die Variablen aus "Größe" stehen dabei für die Breite / Höhe des Bildes in Pixeln.

Wenn ich diesen Code benutze, wird der Boolean zwar "true" wenn ich es anklicke, wenn ich jedoch in der Nähe davon hinklicke auch. Bei größeren Abständen ist es jedoch nicht mehr der Fall.

Wahrscheinlich übersehe ich dank meiner eigenen "Intelligenz" einfach irgendwas, hoffe jemand weiß bescheid :)


Mit freundlichen Grüßen,

MrBarsack

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

06.10.2012, 19:14

Wie bekommst du denn die Koordinaten der Maus rein? Du kannst den Ursprung des Fensters oben links, unten links oder sonst wo haben. Das musst du dementsprechend anpassen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

06.10.2012, 19:57

Das kann man übrigens auch prima anders schreiben:

Java-Quelltext

1
2
3
4
5
6
7
8
public boolean angeklickt()
    {
          return Mouse.isButtonDown(0)
              && (MausInput.getX() > Position.x)
              && (MausInput.getX() < Position.x + Größe.Breite)
              && (MausInput.getY() > Position.y)
              && (MausInput.getY() < Position.y + Größe.Hoehe);
    }
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MrBarsack

Frischling

  • »MrBarsack« ist der Autor dieses Themas

Beiträge: 65

Wohnort: NRW

Beruf: Student

  • Private Nachricht senden

4

07.10.2012, 11:34

@DeKugelschieber

Java-Quelltext

1
2
3
4
    public static float getX()
    {
        return  Mouse.getX() / (Bildschirm.Breite / [In glOrtho verwendeter Wert]);
    }

Die "Mouse", woher auch der X Wert stammt, ist dabei die aus LWJGL.
Hoffe ich habe deine Frage richtig verstanden :)

@BlueCobold
Oh, daran habe ich nicht gedacht :D

Dankeschön, so kann man einige Zeilen sparen ;)


Übrigens, wenn man es leicht anpasst, also:

Java-Quelltext

1
if(MausInput.getX() > Position.x && MausInput.getX() < Position.x + Größe.Breite / 1.55)


Funktioniert es auch richtig. Könnte also sein, dass der Wert aus Größe.Breite falsch ist?

Gruß,

MrBarsack

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

5

07.10.2012, 12:01

Hmm so ein Faktor klingt für mich jetzt eher nach Zufall. Hast du mal probiert, ob es immer noch so funktioniert, wenn du das Fenster woanders hin verschiebst?
Ich gehe mal fast davon aus, dass du die Koordinaten des Fensters noch draufrechnen musst.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

07.10.2012, 12:08

Wenn Du die Szene skalierst, musst Du natürlich auch die Koordinaten skalieren, das ist richtig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MrBarsack

Frischling

  • »MrBarsack« ist der Autor dieses Themas

Beiträge: 65

Wohnort: NRW

Beruf: Student

  • Private Nachricht senden

7

07.10.2012, 12:17

Hallo,

Ja, der Faktor ist durch herumprobieren herausgekommen, also nur Zufall.
Für die Höhe hab ich dann auch einen anderen Faktor verwendet ;)

Wenn ich das Fenster verschiebe, funktioniert es weiterhin.

Zum Koordinaten skalieren: Also das, was in getX () gemacht wird, mit "/ (Bildschirm.Breite / [In glOrtho verwendeter Wert])" ?

Gruß,

MrBarsack

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

07.10.2012, 13:57

Was Du in glOrtho wo wie angibst, das weiß ich nicht und da mit der Bezug fehlt, kann ich die Frage nicht passend beantworten. Ganz klar ist aber, dass Du die Koordinaten der Maus skalieren musst, wenn Du die Szene skalierst.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MrBarsack

Frischling

  • »MrBarsack« ist der Autor dieses Themas

Beiträge: 65

Wohnort: NRW

Beruf: Student

  • Private Nachricht senden

9

07.10.2012, 18:25

Achso, verstehe was du meinst.

Ja, das wird in der MausInput.getX () skaliert, bei einem glOrtho-Wert von 64 und einer Fenstergröße von 500 ist z.B. Rechts-unten die Koordinate 64/64 usw.

Außerdem verfolgen die Objekte auch die Maus richtig, wenn man deren X und Y-Wert auf den der Maus setzt.

Gruß,

MrBarsack

10

07.10.2012, 22:16

Also ich würde mal ganz intuitiv kurz "Grösse" zu "Groesse" ändern.

Werbeanzeige