Kreisrunde Menüs - Maussteuerung
Kreisrunde Menüs - Maussteuerung
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!!!
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!!!
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Kreisrunde Menüs - Maussteuerung
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.
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
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
Re: Kreisrunde Menüs - Maussteuerung
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:
Eingesetzt:
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
Code: Alles auswählen
If Distance(Menu1_x, Menu1_y, Mouse_x, Mouse_y) < MenuRadius
; Drin
EndIf
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Kreisrunde Menüs - Maussteuerung
@nick
achso klaar
sorry, bin nicht drauf gekommen
achso klaar
sorry, bin nicht drauf gekommen

Re: Kreisrunde Menüs - Maussteuerung
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.
Gruß - WPö
PS: Nic, Ray und Stargate waren schneller.
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
Re: Kreisrunde Menüs - Maussteuerung
du kannst dir die Wurzel auch sparen, indem du beide Seiten quadrierst...
das ist zeitsparender, als Pov() und Sqr()
Code: Alles auswählen
If r*r < dx * dx + dy * dy ; Kollision
PB 4.41 - Win XP pro
Re: Kreisrunde Menüs - Maussteuerung
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-
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-
"I became insane, with long intervals of horrible sanity." - Edgar A. Poe
Re: Kreisrunde Menüs - Maussteuerung
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.
pb 4.51