Circle mit Mouse abgleichen

Für allgemeine Fragen zur Programmierung mit PureBasic.
neuling
Beiträge: 26
Registriert: 18.10.2007 16:25

Circle mit Mouse abgleichen

Beitrag von neuling »

Hallo,

ich habe da mal eine Generelle frage zur entscheidung.

Und zwar, ich habe einen Kreis (durchmesser:15px) der im "kreis" wandert:

Code: Alles auswählen

pi.f=pi.f+0.1
x=r*cos(pi)
y=r*sin(pi)
schön und gut, der Kreis wandert, so wie ich es auch haben möchte.
Nun möchte ich aber versuchen diesen wandernen Kreis mit der Maus zu "berühren", sprich, wenn ich mit der Maus auf den Kreis komme soll was passieren, in der dieser art habe ich es versucht, aber ohne Erfolg:

Code: Alles auswählen

If MouseX() = x And MouseY()=y
     .... mach was
 EndIf

;#### Den Durchmesser des kreises versuchen zu berücksichtigen###

If MouseX() = x+15 And MouseY()=y+15
     CloseScreen()
 EndIf

Leider funktioniert diese Methode nicht, hat jemand eine Idee?

Da stelle ich bei mir auch direkt noch eine frage, wenn ich eine Box habe, nehmen wir mal an die füllt 1/4 des Bildschirmes aus, wenn nun der Mauszeiger in dieser Box kommt, wie finde ich es heraus? Ich gebe der Box ja vier argumente mit: x,y,breite,höhe aber die maus hat ja nur 2 Argumente, MouseX() und MouseY(), wie stelle ich fest das sich die Maus irgendwo in der Box pixelgenau befindet?

Würde mich sehr über eine Antwort freuen!
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

punkt auf kreis prüfst du so:

Code: Alles auswählen

  mx = MouseX()
  my = MouseY()
  diffX = xPosKreis-mx
  diffY = yPosKreis-my
  If (diffX*diffX + diffY*diffY) < (radiusKreis*radiusKreis) ;satz des pythagoras (a²+b²=c²), nur das du auf beiden seiten das wurzelziehen weglaesst
    ; <<<
punkt auf rechteck so:
(x,y,w,h sind position, breite und hoehe des rechtecks)

Code: Alles auswählen

  If mx>=x And mx<x+w And my>=y And my<y+h
    ; <<<
..hie mal komplett

Code: Alles auswählen

InitSprite()
InitMouse()
ww=400
wh=200
hWin=OpenWindow(0, 50,50,ww,wh, "")
OpenWindowedScreen( hWin, 0,0,ww,wh, 0,0,0)

;KREIS
xPosKreis=100
yPosKreis=50
radiusKreis=30

;BOX
x=200
y=150
w=40
h=20

Repeat
  event=WaitWindowEvent(30)
  Select event
    Case #PB_Event_CloseWindow
      quit=1
  EndSelect
  
  ExamineMouse()
  mx = MouseX()
  my = MouseY()
  
  ;KREIS KOLLISION
  diffX = xPosKreis-mx
  diffY = yPosKreis-my
  If (diffX*diffX + diffY*diffY) < (radiusKreis*radiusKreis) ;satz des pythagoras (a²+b²=c²), nur das du auf beiden seiten das wurzelziehen weglaesst
    colorKreis=200
  Else
    colorKreis=100
  EndIf
  
  ;BOX KOLLISION
  If mx>=x And mx<x+w And my>=y And my<y+h
    colorBox=200
  Else
    colorBox=100
  EndIf
  
  StartDrawing(ScreenOutput())
    Circle(xPosKreis,yPosKreis,radiusKreis, colorKreis)
    Box(x,y,w,h,colorBox)
    
    Box(mx,my,2,2,$00ff00);(mauszeiger)
  StopDrawing()
  
  FlipBuffers()
  ClearScreen($333333)
Until quit
my pb stuff..
Bild..jedenfalls war das mal so.
neuling
Beiträge: 26
Registriert: 18.10.2007 16:25

Beitrag von neuling »

Hallo,

danke. Das mit dem Rechteck habe ich (leider oder gut?) direkt nach meiner frage selber herausbekommen. Das mit der Kreis abfrage noch nicht, bis JETZT! Danke und vielen danke für deine Mühe mit mir ;)
Antworten