Seite 1 von 2
Kreisrunde Menüs - Maussteuerung
Verfasst: 29.03.2010 18:19
von MoonWolf
Hallo
Ich habe folgendes Problem:
Ich versuche ein Spiel zu Programmieren (wird ein 2D JumpnRun Game) und habe dafür ein Menü in Gimp gemalt.
Die einzelnen Menüpunkte sind Kreise. Wie kann ich jetzt herausfinden ob mein Mauszeiger sich beim Klick grade in einem Kreis befindet?
DANKE!!!
Re: Kreisrunde Menüs - Maussteuerung
Verfasst: 29.03.2010 18:37
von NicTheQuick
Eigentlich sollte selbst für einen Anfänger dieses Problem mit einfacher Schulmathematik lösbar sein.
Ich gebe dir trotzdem einen Anhaltspunkt.
Berechne den Abstand zwischen Maus und Kreismittelpunkt und schau, ob er kleiner ist als der Radius.
Re: Kreisrunde Menüs - Maussteuerung
Verfasst: 29.03.2010 18:38
von RSBasic
Code: Alles auswählen
InitSprite()
InitMouse()
InitKeyboard()
If OpenScreen(1024,768,32,"Screen")
CreateSprite(1,100,20,0)
CreateSprite(2,2,2,0)
StartDrawing(SpriteOutput(1))
Box(0,0,100,20,RGB(100,100,255))
StopDrawing()
StartDrawing(SpriteOutput(2))
Box(0,0,2,2,RGB(100,255,100))
StopDrawing()
Repeat
FlipBuffers()
ClearScreen(RGB(0,0,0))
DisplaySprite(1,100,100)
ExamineMouse()
DisplaySprite(2,MouseX()-SpriteWidth(2)+1,MouseY()-SpriteHeight(2)+1)
If MouseX()>=100 And MouseX()<=200 And MouseY()>=100 And MouseY()<=120
StartDrawing(ScreenOutput())
If MouseButton(1)=1
DrawText(10,10,"Wird gedrückt...",RGB(255,255,100))
Else
DrawText(10,10,"Maus ist auf Button",RGB(255,100,100))
EndIf
StopDrawing()
EndIf
ExamineKeyboard()
Until KeyboardReleased(#PB_Key_Escape)
EndIf
Etwa so? Ist zwar nur ein Beispiel über ein Rechteck und deren Abfrage, ob Mauscursor sich auf der Buttongrafik befindet und ob gedrückt wird, aber müsste kein Problem mit den Kreisen darstellen.
Re: Kreisrunde Menüs - Maussteuerung
Verfasst: 29.03.2010 18:39
von STARGÅTE
Die Kreismittelpunkte wirst du sicher kennen, und die Mausposition auch.
Mit dem Radius dazu kannst du ermitteln ob der Mauszeiger innen oder außen ist:
Code: Alles auswählen
; Berechnet den Abstand zwischen zwei Punkte
Macro Distance(x1, y1, x2, y2)
Sqr( Pow((x1)-(x2),2) + Pow((y1)-(y2),2) )
EndMacro
Eingesetzt:
Code: Alles auswählen
If Distance(Menu1_x, Menu1_y, Mouse_x, Mouse_y) < MenuRadius
; Drin
EndIf
Re: Kreisrunde Menüs - Maussteuerung
Verfasst: 29.03.2010 18:39
von MoonWolf
@nick
achso klaar
sorry, bin nicht drauf gekommen

Re: Kreisrunde Menüs - Maussteuerung
Verfasst: 29.03.2010 18:40
von WPö
Tja, berechneste DeltaX und DeltaY zum Menüpunktzentrum, dann sqrt(DeltaX²+DeltaY²) und wenn das Ergebnis kleiner oder gleich Dein Menüpunktradius ist, ist der Menüpunkt angeklickt.
Gruß - WPö
PS: Nic, Ray und Stargate waren schneller.
Re: Kreisrunde Menüs - Maussteuerung
Verfasst: 29.03.2010 18:40
von MoonWolf
danke!!
Re: Kreisrunde Menüs - Maussteuerung
Verfasst: 29.03.2010 22:04
von Schlumpf
du kannst dir die Wurzel auch sparen, indem du beide Seiten quadrierst...
das ist zeitsparender, als Pov() und Sqr()
Re: Kreisrunde Menüs - Maussteuerung
Verfasst: 03.07.2010 13:17
von Codusa
Sry, dass ich das Thema wieder ausgrabe aber ich habe da nch eine Frage zu:
wie finde in so einem Menü raus in welchem Abschnitt sich die Maus befindet?
Ob sich die Maus innerhalb der grauen Fläche befindet weiss ich schon, dank STARGÅTEs code.
-Codusa-
Re: Kreisrunde Menüs - Maussteuerung
Verfasst: 03.07.2010 14:10
von gnasen
Seit atan2() in PB vorhanden ist, brauchst du nur noch atan2 aufrufen um den Winkel zwischen Maus und Kreismittelpunkt zu bestimmen. Der Winkel liegt immer in einem der Sektoren und damit kannst du bestimmen, wodrüber sich die Maus befindet.