Richtige Mausabfrage

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

FunctionBauer

Betreff: Richtige Mausabfrage

BeitragSo, Mai 10, 2009 10:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

BladeRunner

Moderator

BeitragSo, Mai 10, 2009 10:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 10, 2009 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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() ; MouseY()

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

BeitragSo, Mai 10, 2009 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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!
Cool
So wie ihr von anderen Menschen behandelt werden wollt so behandelt sie auch!

The_Nici

BeitragSo, Mai 10, 2009 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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!
Cool


ImageRectCollide oder RectsOverlap sind ja doof. Coole Leute nehmen das verbuggte ImagesCollide!

Nicdel

BeitragSo, Mai 10, 2009 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 10, 2009 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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!
Cool


Wozu denn zeichnen, es reicht doch wenn man die Kollision einfach prüft Wink
Play Satyr!

Nicdel

BeitragSo, Mai 10, 2009 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 11, 2009 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Question
aber vielleicht muss man einfach mit rechteckigen Knöpfen arbeiten Confused


Idea Vielleicht muss man einfach ein Rechteck an die Maus zeichnen!

mfG Flori

Nicdel

BeitragMo, Mai 11, 2009 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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)

Xeres

Moderator

BeitragMo, Mai 11, 2009 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Fredko

BeitragMo, Mai 11, 2009 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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 überprüfen ob die Farbe an der
relativen Mausposition der MaskImage Farbe entspricht, danach kann man
handeln wie man will und hat eine schöne und schnelle Kollision.
!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group