Autor Beitrag
juKx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 45

WinXp Pro Sp2
Delphi 7 Enterprise Edition
BeitragVerfasst: Do 06.10.05 17:45 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: 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

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
-delphin-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 200



BeitragVerfasst: Fr 07.10.05 15:55 
ich hoffe für dich, dass es ein Shape ist :D
juKx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 45

WinXp Pro Sp2
Delphi 7 Enterprise Edition
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 33

WinXP SP2
Delphi 6 Personal ;) , C# (VS 2003 Prof.)
BeitragVerfasst: 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
Hält's aus hier
Beiträge: 10

Win XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 33

WinXP SP2
Delphi 6 Personal ;) , C# (VS 2003 Prof.)
BeitragVerfasst: 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
Hält's aus hier
Beiträge: 10

Win XP

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 45

WinXp Pro Sp2
Delphi 7 Enterprise Edition
BeitragVerfasst: Fr 07.10.05 17:43 
hi

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 33

WinXP SP2
Delphi 6 Personal ;) , C# (VS 2003 Prof.)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 45

WinXp Pro Sp2
Delphi 7 Enterprise Edition
BeitragVerfasst: 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 :)