G
Guest
Gast
hallo,
in meinem mittlerweile ausschweifenden thread über kollision von sechsecken blickt denk ich mal keiner mehr durch,
was ich auch nachvollziehen kann
ich will hier keine doppel-posts machen, aber das hier ist eher ne allgemeine frage, die ich hier nochmal klar stellen will, weil ich denke dass sie eher untergeht oder falsch verstanden wird im anderen thread:
Und zwar hab ich hier ein (für mich) extrem mysteriöses problem:
Ich hab 3 polygone (sechsecke). diese sind teil eines panels, dessen paintcomponent-methode nix anderes macht als
jedes dieser polygone zu zeichnen, mit der funktion: g.drawPolygon()
dann hat mein panel noch nen mouseListener. die mouseClicked-methode ist wie folgt implementiert:
für jedes der drei polygone auf dem panel wird aufgerufen:
so, die polygone werden zufällig generiert. in 80% der fälle passt alles: man kann in die polygone reinklicken
und enthält die entsprechende System.out-print anweisung.
allerdings machnmal, da kommt keine Meldung, obwohl man ins Polygon klickt.
Manchmal heisst nicht, dass es z.B. bei jedem 3.Klick funktioniert, sondern es hängt vom Polygon ab:
wenns einmal nicht geht, wird es nie gehen, auch wenn man 50 mal klickt.
Spontan würde man nun denken, dass ich halt logische Fehler in der Erstellung der Polygone hab.
Und hier ist das, was mir so suspekt ist: es werden IMMER alle 3 polygone schön gezeichnet, ich erinnere:
mit der funktion drawPolygon()
aber die contains()-methode liefert bei machnen Polygonen halt kein true.
Für mich kann das jetzt nur heißen: Die drawPolygon methode verwendet zum zeichnen andere Informationen aus dem Polygon, als es contains() tut. Aber gemalt wird ja (denk ich) nach den 6 Eckpunkten meines Polygons.
Halt die 6 Punkte und dann Verbindungslinien, oder?
Also enthält das Polygon in seinen Variablen xpoints[] und ypoints[] die korrekten Daten.
Daraus folgt: Wenn ich im Panel auf einen Punkt klicke, der rein grafisch innerhalb des Polygons liegt, dann
muss ein contains() mit diesem Punkt auf dem Polygon auch ein true ergeben.
Tut es eben machnmal nicht.
Noch lustiger: MAchnmal funktioniert nur "ein Teil" des Polygons: z.B. wenn ich innerhalb des Polygons klicke, aber eher am unteren Rand des Inhalts, dann kommt ne Meldung. Wenn ich weiter oben (aber auch innen) klicke, dann wieder nicht.
Also meine Frage: Wieso zeichnet ein drawPolygon() das Ding korrekt, aber wenn ich reinklicke checkt die contains()-methode das nicht? Und vorallem: Wieso passiert das nur manchmal?
MEine logischen Implementierungen müssten ja da egal sein oder? KAnn ja sein dass da was falsch ist, aber dann würde er es auch falsch zeichnen. Er zeichnet es aber immer schön als Sechseck.
Bitte um Aufklärung, das wird doch wohl kein "Bug" in der API sein?
Vielen Dank.
in meinem mittlerweile ausschweifenden thread über kollision von sechsecken blickt denk ich mal keiner mehr durch,
was ich auch nachvollziehen kann
ich will hier keine doppel-posts machen, aber das hier ist eher ne allgemeine frage, die ich hier nochmal klar stellen will, weil ich denke dass sie eher untergeht oder falsch verstanden wird im anderen thread:
Und zwar hab ich hier ein (für mich) extrem mysteriöses problem:
Ich hab 3 polygone (sechsecke). diese sind teil eines panels, dessen paintcomponent-methode nix anderes macht als
jedes dieser polygone zu zeichnen, mit der funktion: g.drawPolygon()
dann hat mein panel noch nen mouseListener. die mouseClicked-methode ist wie folgt implementiert:
für jedes der drei polygone auf dem panel wird aufgerufen:
Code:
if (currentPolygon.contains(geklickterPunkt)){
System.out.println("clicked: "+currentPolygon.getID);
}
so, die polygone werden zufällig generiert. in 80% der fälle passt alles: man kann in die polygone reinklicken
und enthält die entsprechende System.out-print anweisung.
allerdings machnmal, da kommt keine Meldung, obwohl man ins Polygon klickt.
Manchmal heisst nicht, dass es z.B. bei jedem 3.Klick funktioniert, sondern es hängt vom Polygon ab:
wenns einmal nicht geht, wird es nie gehen, auch wenn man 50 mal klickt.
Spontan würde man nun denken, dass ich halt logische Fehler in der Erstellung der Polygone hab.
Und hier ist das, was mir so suspekt ist: es werden IMMER alle 3 polygone schön gezeichnet, ich erinnere:
mit der funktion drawPolygon()
aber die contains()-methode liefert bei machnen Polygonen halt kein true.
Für mich kann das jetzt nur heißen: Die drawPolygon methode verwendet zum zeichnen andere Informationen aus dem Polygon, als es contains() tut. Aber gemalt wird ja (denk ich) nach den 6 Eckpunkten meines Polygons.
Halt die 6 Punkte und dann Verbindungslinien, oder?
Also enthält das Polygon in seinen Variablen xpoints[] und ypoints[] die korrekten Daten.
Daraus folgt: Wenn ich im Panel auf einen Punkt klicke, der rein grafisch innerhalb des Polygons liegt, dann
muss ein contains() mit diesem Punkt auf dem Polygon auch ein true ergeben.
Tut es eben machnmal nicht.
Noch lustiger: MAchnmal funktioniert nur "ein Teil" des Polygons: z.B. wenn ich innerhalb des Polygons klicke, aber eher am unteren Rand des Inhalts, dann kommt ne Meldung. Wenn ich weiter oben (aber auch innen) klicke, dann wieder nicht.
Also meine Frage: Wieso zeichnet ein drawPolygon() das Ding korrekt, aber wenn ich reinklicke checkt die contains()-methode das nicht? Und vorallem: Wieso passiert das nur manchmal?
MEine logischen Implementierungen müssten ja da egal sein oder? KAnn ja sein dass da was falsch ist, aber dann würde er es auch falsch zeichnen. Er zeichnet es aber immer schön als Sechseck.
Bitte um Aufklärung, das wird doch wohl kein "Bug" in der API sein?
Vielen Dank.