Richtige Mausabfrage
Übersicht

![]() |
FunctionBauerBetreff: Richtige Mausabfrage |
![]() Antworten mit Zitat ![]() |
---|---|---|
Diese Frage beschäftigt mich schon seit längerem. Wie kann ich innerhalb eines Programmes in einem kleinen Fenster, eine Mausabfrage von einzelnen Bereichen in diesem Fenster durchführen, ohne dass die Bereiche einzelne Bilder sind oder der Cursor ein Image ist. (z.B. nicht mit ImagesCollide)
d.h. Ich arbeite gerade an einem Sequenzer(..ähnlich wie Hammerhead) und möchte abfragen ob die Maus auf einen der Knöpfe gedrückt hat. Bitte um Antwort. PS: Mit "Raster" geht auch nicht, wegen der geometrischen Form der Knöpfe. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn es ja runde Knöpfe sind kannst du den Abstand vom Mittelpunkt der Knöpfe bestimmen (Satz des Pythagoras) und schauen ob er kleiner als der Radius ist. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei runden knöppen :
Code: [AUSKLAPPEN] If RectsOverlap(MouseX(),MouseY(),1,1,button_x,button_y,button_size,button_size)
Abstand_Maus# = Sqr( (MouseX()-button_x+button_size/2)^2+(MouseY()-button_y+button_size/2)^2 ) If Abstand_Maus# < button_size/2 then Button_press = 1 Endif Wobei ich das "^2" durch die selbe rechnung ersetzten würde ((MouseX()-button_x+button_size/2)*(MouseX()-button_x+button_size/2)) weil es sonst sehr lahm werden könnte... Ich glaub du suchst eigl. das hier : MouseX ![]() ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
SiSoFlo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das ist bestimmt nicht die eleganteste Lösung, aber ich zeichne immer einen Pixel an MouseX(), MouseY() und prüf dann mit ImgagesCollides ob die Maus über Knopf ist!
![]() |
||
So wie ihr von anderen Menschen behandelt werden wollt so behandelt sie auch! |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
SiSoFlo hat Folgendes geschrieben: Das ist bestimmt nicht die eleganteste Lösung, aber ich zeichne immer einen Pixel an MouseX(), MouseY() und prüf dann mit ImgagesCollides ob die Maus über Knopf ist!
![]() ImageRectCollide oder RectsOverlap sind ja doof. Coole Leute nehmen das verbuggte ImagesCollide! |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
The_Nici hat Folgendes geschrieben: ImageRectCollide oder RectsOverlap sind ja doof. Coole Leute nehmen das verbuggte ImagesCollide! Und haben dann viel Freude bei NVidia-Karten. |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
DerHase |
![]() Antworten mit Zitat ![]() |
---|---|---|
SiSoFlo hat Folgendes geschrieben: Das ist bestimmt nicht die eleganteste Lösung, aber ich zeichne immer einen Pixel an MouseX(), MouseY() und prüf dann mit ImgagesCollides ob die Maus über Knopf ist!
![]() Wozu denn zeichnen, es reicht doch wenn man die Kollision einfach prüft ![]() |
||
Play Satyr! |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei runden Knöpfen gibt's mit der Methode aber Probleme. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
SiSoFlo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
The_Nici hat Folgendes geschrieben: ImageRectCollide oder RectsOverlap sind ja doof. Coole Leute nehmen das verbuggte ImagesCollide!
Ich dachte ImageRectCollide bzw. RectsOverlap handelt von einem Rechteck. Wenn der Knopf aber rund ist ![]() aber vielleicht muss man einfach mit rechteckigen Knöpfen arbeiten ![]() ![]() mfG Flori |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei ImageRectCOllide wird die Kollision eines Bildes mit einem Rechteck geprüft. Wenn der Button rund macht das nichts aus, da dieser ja das Bild ist. (Ich dachte ImageRectCollide wäre auch verbuggt... -> Link) | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kreise lassen sich einfach auf kollision prüfen; man muss nur den Abstand vom Mittelpunkt zur Maus messen. Ist der Radius gleich oder größer, findet eine kollision statt.
Für ein Rechteck benutzt man eine Funktion, wie man sie z.B. bei "Mouse on the road" findet: Code: [AUSKLAPPEN] Function mouseInRect(x, y, w, h)
If mouse_x <= x Then Return False If mouse_y <= y Then Return False If mouse_x >= x + w Then Return False If mouse_y >= y + h Then Return False Return True End Function Alle anderen Geometrischen Formen nähert man auf diese weise an, Buttons müssen nicht unbedingt 100% Pixelperfekt sein... |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Fredko |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Falls man pixelgenau, zeitsparend und nicht verbuggt eine Kollision haben
will, und es nicht wichtig ist, dass die Maus nur an einem Punkt klickt, kann man einfach gucken ob die Maus a) über den Ausmaßen des Bildes ist und dann b) mit ReadPixelFast ![]() relativen Mausposition der MaskImage Farbe entspricht, danach kann man handeln wie man will und hat eine schöne und schnelle Kollision. |
||
! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group