Problem mit Mausbewegung nach einem Klick auf Gadget

Anfängerfragen zum Programmieren mit PureBasic.
OlderCoder
Beiträge: 109
Registriert: 18.03.2013 12:30
Wohnort: Bayerland
Kontaktdaten:

Problem mit Mausbewegung nach einem Klick auf Gadget

Beitrag von OlderCoder »

Hallo miteinander,

ich bin dabei, ein Memory-Spiel zu programmieren. Das funktioniert soweit auch ganz gut.
Allerdings gibt es ein Problem, das ich bisher nicht lösen kann.

Zum meinem Bedien-Prinzip:
Ich klicke die erste Spielkarte an, und sie zeigt ein Bild.
Dann klicke ich die zweite Spielkarte an, die dann ebenfalls ein Bild zeigt.
Mit dem dritten Klick irgendwo ins Fenster erfolgt dann erst die Reaktion, was ich genauso möchte (keine Timer-Lösung). Entweder werden bei verschiedenen Karten die Karten dann wieder zugedeckt, oder bei gleichen werden sie entfernt.
Soweit funktioniert das Ganze.

Das Problem ist jetzt folgendes:
Jede Spielkarte ist bei mir ein ImageGadget.
Und wenn ich beim Klick auf die zweite Spielkarte nur ein wenig die Maus bewege, dann wertet das die WaitWindowEvent()-Abfrage, die dahintersteckt, als einen weiteren Klick auf das ImageGadget, was zur Folge hat, dass sofort beide Karten entweder entfernt oder wieder zugedeckt werden, sodass man sie sich gar nicht mehr anschauen kann. Und diese Mausbewegung lässt sich in der Spielpraxis grundsätzlich nicht vermeiden, sodass dieser Fall relativ häufig vorkommt.

Ich hab das jetzt so lösen wollen, dass das Programm darauf wartet, dass die linke Maustaste wieder losgelassen wird und erst dann das Programm wieder weiterläuft, und zwar damit

While GetAsyncKeyState_(#VK_MBUTTON)
Wend

Meines Wissens nach wird damit die linke Maustaste direkt abgefragt, aber das stimmt so vielleicht auch gar nicht. Jedenfalls funktioniert es nicht. Es wird nicht gewartet. Warum auch immer.
Mit der gleichen Idee hatte ich es auch mit der MouseButton()-Abfrage versucht. Aber da bin ich auch nicht zurecht gekommen. Irgendwelche MouseInit()- undWindow- und Screen-Geschichten, die hier nötig waren, haben mich überfordert und hätten möglicherweise auch nicht zum Ziel geführt.

Dann hab ich gehofft, dass bei der WindowsEvent-Abfrage doch irgendwo in den Events eine Unterscheidung möglich wird, ob die Maus nur in das Gadget klickt, oder nach dem Klick noch bewegt wird, aber da hab ich keine Möglichkeit gesehen.
Ein Klick ins Gagdet erzeugt ein #PB_Event_Gadget, und wenn man die Maus danach bewegt, ohne die Maustaste loszulassen, wird zusätzlich gleich nochmal ein #PB_Event_Gadget erzeugt, ohne das ich das verhindern kann.

Ich muss dazu sagen, ich programmiere sehr selten und muss mir dann alles nötige mühsam erarbeiten.
Deshalb hab ich meine Frage ins Anfänger-Forum gestellt. Aber auch, weil vermutlich meine Frage eher die Grundlagen betrifft. Ich hoffe, das ist ok.

Das ganze Spiel kann ich hier nicht hochladen, da ich einige Inhalte verwende, für die ich keine Rechte besitze (Bild und Ton), und ich das Spiel deshalb nur zu meinem Privatvergnügen nutzen kann - aber das sollte auch nicht nötig sein.

Habt Ihr eine Idee, was ich tun kann?
Würd mich freuen.

Gruß
OlderCoder
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: Intel Core i3-4170 CPU 3,70 GHz
8,00 GB Arbeitsspeicher
WIN 10 Pro 64 Bit Betriebssystem
Wohnort: Bremen

Re: Problem mit Mausbewegung nach einem Klick auf Gadget

Beitrag von Pelagio »

hallo OlderCoder,

wen ich Dich richtig verstanden haben,
würde ich Dir raten mal in der Hilfe nach EventType() ausschau zu halten. :allright:
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win10Pro(64); PB6.10 LTS]. :allright:
OlderCoder
Beiträge: 109
Registriert: 18.03.2013 12:30
Wohnort: Bayerland
Kontaktdaten:

Re: Problem mit Mausbewegung nach einem Klick auf Gadget

Beitrag von OlderCoder »

Vielen lieben Dank Pelagio.
Die Funktion ist exakt das was ich gesucht, aber in der Hilfe nicht gefunden hatte, warum auch immer.
Dabei gibt es z.B. auf der WindowEvent()- oder WaitWindowEvent()-Seite unten bei siehe auch einen Hinweis auf den Befehl.
Aber es ist nicht immer einfach, zu wissen, wo man suchen soll, wenn man nicht weiß, wie das Gesuchte heißt.
Tatsächlich hatte ich bisher immer nur das Ergebnis von WaitWindowEvent() überprüft und verglichen.
Die Funktion EventType() liefert den Wert #PB_EventType_DragStart, wenn man nach einem Klick auf dem Gadget anfängt, die Maus zu bewegen - was schon einen Hinweis darauf liefert, wie PureBasic die Mausbewegung interpretiert.
Und das kann man natürlich leicht überprüfen, und damit ist mein Problem bereits gelöst. Funktioniert perfekt.
Ich hätte nicht gedacht, dass es so einfach wird.
Freu mich, dankeschön!

LG
OlderCoder
Antworten