Wenn MouseHit irgendwie nicht hittet
Übersicht

![]() |
DivineDominionBetreff: Wenn MouseHit irgendwie nicht hittet |
![]() Antworten mit Zitat ![]() |
---|---|---|
Grüße ihr Armen, die unter diesem schrecklichen und wahrlich noch nie besprochenen Problem leiden, dass im Volksmunde auch einfach als "Bug" abgetan wird:
Mousehit() funktioniert nicht so zuverlässig, wie es soll. Ich habe da ein Workaround im Angebot. Vorweg: Das ist kompletter Schwachsinn! MouseHit() funktioniert genau so, wie es geplant ist: es prüft, ob die Maus gedrückt wurde, und zwar nicht dauerthaft (das wäre Mousedown()) sondern eben nur einmal kurz bzw. nur einmal während der ganzen Druckdauer. Das bedeutet, dass Mousehit() während eines Druckes nur einmal TRUE zurückliefert. Wenn ich 10min ohne unterbrechung gedrückt halte, kann ich also nur ein mal auf ein MouseHit() hin prüfen, denn ein zweites mal ist nicht möglich, das wäre ja schließlich ein Dauerbetrieb - MouseDown. Ja, so erklärte ich es mir zumidnest seit jeher; wie es im Hintergrund wahrlich funktioniert, kann ich nicht sagen. Klar ist jedoch, dass es eben nur ein mal reagiert, wenn man drückt. Und das zieht offensichtlich folgendes Problem mit sich: MouseHit() lässt sich wirklich nur EIN MAL abfragen. Wenn ich jetzt aber If-Elseif-Else-Abfragen habe in denen 10 MouseHit() fragen vorkommen, ja, was macht man denn da? Am einfachsten ist folgende Lösung, die überall praktiziert und empfohlen wird, wenn dieses neuartige Problem - das bis dato seit etwa 4 Jahren "aktuell" und "mysteriös" ist... - auftaucht. Status der Maus für einen Schleifendurchlauf speichern und abfragen: Code: [AUSKLAPPEN] Global lmb_hit = false ;Left Mouse Button While Not Keyhit( 1 ) cls lmb_hit = MouseHit( 1 ) drawZeuch( ) flip Wend Das funktioniert eigentlich auch super. Allerdings geht's auch anders, was vielleicht ebenfalls sehr schön und praktisch ist - vor allem, wenn man Mousehit und Mousedown gleichzeitig benötigt (hier geht der Credit an Inarie, der mir mal einen äquivalenten Code für Tastenabfragen empfahl): Code: [AUSKLAPPEN] ;Mausstadien als Konstante definieren. ;Das hilft beim lesen, denn Wörter sind besser zu ;verstehen als Zahlen später. Auch wenn man diese ;kommentieren sollte. Const NORMAL = 0 Const HIT = 1 Const DOWN = 2 Const UP = 3 Global LMB ;Left Mouse Button Function mausstatus( ) if LMB = NORMAL if MouseDown( 1 ) then LMB = HIT elseif LMB = HIT if mousedown( 1 ) then LMB = DOWN else LMB = UP elseif LMB = DOWN if not mousedown( 1 ) then LMBUP elseif LMB = UP LMB = NORMAL endif ;das gleiche hier mit RMB für Right Mouse Button etc. Endfunction Sowas nimmt man dann auch gerne für STRG oder ALT etc., um Tastenkombinationen zu erstellen. Dafür brauchte ich das mal und es war sehr praktisch - ebenfalls zu benutzen für GUIs und ähnliches. Achja, die Abfrage im Programm: Code: [AUSKLAPPEN] If LMB = HIT then hitTheMouse( )
|
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
judos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
geht also auch etliches einfacher mit mousedown...
Code: [AUSKLAPPEN] ...grafik e.t.c. global timer=0 repeat if mousehit_neu(1)=1 then ;mache das was du willst endif until keydown(1) end function mousehit_neu(nummer) if mousedown(nummer)=1 then timer=timer+1 if timer=1 then ret_wert=1 if timer>1 then ret_wert=0 else timer=0:ret_wert=0 endif return ret_wert end function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group