Entwickler-Ecke

Multimedia / Grafik - Bewegter Kreis mit Maus draufklicken!


juKx - Do 06.10.05 17:45
Titel: Bewegter Kreis mit Maus draufklicken!
hi,

ich wollte ein ganz billiges spiel entwerfen aber mir fehlen dazu noch ein paar sachen die ich nicht alleine hinbekomme.

ich habe ein kreis der sich im 2d raum mit beliebiger geschwindigkeit bewegt und ich möchte das wenn ich den kreis mit der maus anklicke das er weggeht oder irgentetwas anderes macht..mein problem ich weiss nicht wie ich das schreiben soll:
if mouse.cursorpos=kreis then
bla
??
ka thx im Voraus


uall@ogc - Do 06.10.05 17:56

wie erstellst du den kreis? ist das nen shape? oder malsu du den auf dem canvas?

wenns nen shape ist, kannst du einfach machen "onshapeclick" abfangen (shape anklicken, dann links im objektinspektor auf methode/ereignisse oder wie des heißt)

wenn du den selbst malst musst du halt per berechnung prüfen ob der klick innerhalb des kreises war (koordinaten abfangen) und dann mit hilfe der kreisgleichung schaun ob die innerhalb des kreises liegen


-delphin- - Fr 07.10.05 15:55

ich hoffe für dich, dass es ein Shape ist :D


juKx - Fr 07.10.05 16:13

hi,
nein habe ich leider auf dem canvas gemalt.
mit ellipse....aber ich denke das ich mir mal das mit dem shape angucke den das hört sich wirklich leichter an..wenn du doch ne idee hast wie das mit canvas.ellipse geht dann schreibe

thx für deine Hilfe


mg80s - Fr 07.10.05 16:24

Eine Ellipse auch noch....puh, leider habe ich die Formel nicht im Kopf, aber nur zur Arbeitsaufwandsverdeutlichung (wasn Wort!) mal das Prinzip beim Kreis:

Wenn M(c;d) der Mittelpunkt und r der Radius Deines Kreises ist, dann liegt P(x;y) auf dem "Kreisumfang" wenn gilt
(x-c)² + (y-d)² = r²
und im Kreis (inklusive Umfang) wenn gilt
(x-c)² + (y-d)² <= r²


Euklid - Fr 07.10.05 16:31

Tach allerseits

Hier misch ich mich auch mal ein ;). (Fast) Analog zum Kreis sieht die Ellipsengleichung meines Erachtens folgendermassen aus:

x^2/a^2 - y^2/b^2 = 1 (wobei a die grosse und b die kleine Halbachse ist)

Die Gleichung auflösen kann man sicherlich irgendwie *ggg*.

Gruss
Euklid


mg80s - Fr 07.10.05 16:35

Oho, der Meister spricht :wink:

Würde das Überprüfen nicht per "Ausdruck <= 1" funktionieren? Dann müsste (x;y) doch in der Ellipse liegen, oder stell ich mir das zu einfach vor?


Euklid - Fr 07.10.05 16:40

Meister Euklid ist inzwischen etwas in die Jahre gekommen und ziemlich altersschwach geworden. Klingt jedoch durchaus vernünftig, ja... Doch es geht nichts über Ausprobieren, hehe.


juKx - Fr 07.10.05 17:43

hi

ich bin jetzt soweit das es eigentlich gehen müsste:


Delphi-Quelltext
1:
2:
3:
4:
x:=mouse.CursorPos.X ;  //position des Mousecursor
y:=mouse.CursorPos.Y  ;
if (((x-xm)*(x-xm))+((y-ym)*(y-ym))<=(r*r)) then  // M(xm,ym) P(x,y) ,r = radius
  timer1.Enabled:=false;


also wenn ich mit dem mauszeiger über dem kreis bin und dann linkemaustaste drücke dann müsste er stehen bleiben der kreis..funktioniert aber nicht so wie ich das dachte..

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.


mg80s - Fr 07.10.05 19:23

Wo hast Du den Code denn stehen?

Wenn Du den Kreis zB auf die Form1 zeichnest, dann gehört er in das Event "OnMouseClick" bzw "OnMouseDown" der Form. Dann musst Du auch die Koordinaten der Maus nicht per mouse.CursorPos abfragen sondern bekommst sie gleich als X und Y übergeben.

Ein solches Event (bzw den Handler dazu) kannst Du erstellen, indem Du (wieder am Beispiel Form1) im Objektinspektor mit ausgewählter Form1 auf den Reiter "Events" (oder Ereignisse) wechselst und doppelt auf die leere Eingabefläche neben OnMouseDown klickst.


delfiphan - Sa 08.10.05 13:08

user profile iconEuklid: Bei der Ellipsengleichung stimmt das Vorzeichen des zweiten Termes nicht. x und y sind natürlich gleichberechtigt (sonst kriegst du eine Hyperbel):
x²/a² + y²/b² = 1
Wenn du einen Kreis hast, d.h. a=b gilt, erhältst du daraus die Kreisgleichung (d.h. der Pythagoras).

Auflösen musst du die Gleichung nicht, die Ungleichung, wie von user profile iconmg80s vorgeschlagen, sollte funktionieren.


juKx - Sa 08.10.05 14:14

hi

danke für eure hilfe es funzt jetzt...ich habe nur den fehler gemacht die koordinaten von x,y selber zu deklarieren. das brauch man garnicht wenn man auf ereignisse und mouseclickdown geht da ist da schon automatisch deklariert...

thx an alle :)